2016-09-01 10 views
-1

ファイルの最終更新日をシステム日付(日付ではなく時刻のみ)と比較しようとしている.batファイルを作成しています。ファイルの最終更新日時を取得するには、私は次のようにします。バッチファイルの左の文字列

for %%? in ("anyFile.png") do set dat=%%~t? 

これは私のファイル(DAT = 2016年8月31日8時59分)の最終更新日時を示します。私はそれが魔法のように動作コンソールに直接コードを入力した場合

set dat=%dat:~0,10% 

が、私のバッチファイル内:今私は初め(2016年8月31日)でのみ10個の文字を取得する文字列をカットしてみてくださいコンソール出力は、次の私に与える:

dat=~0,10 

は私が欠けている何かの手掛かりを持っていない、とインターネットで私が同様の問題もないと誰にも見つけることができませんでした。

+0

これは、空の変数 'dat'の結果です。あなたがファイル名だけを指定しているので、間違ったディレクトリを探していると仮定します(作業ディレクトリとバッチファイルの親ディレクトリは2つの異なることに注意してください)... – aschipfl

+0

しかし、最初のコマンドの後、バッチファイルの直後に "set dat"と "pause"と入力すると、コンソールは "dat = 31.08.2016 08:59"を返します。したがって、変数datは空ではありません。または私は間違っていますか? – Moha

+2

あなたのプログラムのより大きな部分を見せてもらえますか?あるいは、あなたの質問の2行がコード全体ですか? – geisterfurz007

答えて

0

は、あなたがヒントを@aschipflありがとう、DAT変数の問題点は、遅延拡張で解決することができますgeisterfurz007 @

Setlocal EnableDelayedExpansion 
... 
if exist "anyFile.png" (

    for %%? in ("anyFile.png") do set dat=%%~t? 
    set dat=!dat:~0,10! 
) 

:いいえ、これは全体のコードではありませんでした。しかし、今問題が解決したので、私はもうそれが必要ないと思う。 :)

+0

私はすでにその問題について考えていたので、尋ねました;) しかし今はうまくいきます良い。 – geisterfurz007

+0

これでバッチファイルで貴重な教訓を学びました。多くの場合、コードの他の部分が間違っていると思われるコードに影響します。元の質問にすべてのコードを表示しただけであれば、問題はすぐに見えていたはずです。 – Squashman

+0

技術的には、「IF存在」は必要ありません。ファイルが存在しない場合、dat変数には何も割り当てられません。 dat変数は未定義になります。 – Squashman

関連する問題