2017-07-11 8 views
0

ファイルが今日修正されたかどうかをエコーするこのコードがあります。 どのように追加すれば、ファイルが今日変更されただけでなく、いつでもエコーすることができます。最終更新日時のファイルをバッチファイルにエコーする方法はありますか?

「今日は%modifytime%で修正されたファイル」のようになります。

@echo off 
for %%F in (C:\temp\file.txt) do (for /F %%D in ("%%~tF") do (set mdate=%%D)) 
for /F "tokens=2" %%D in ('date/t') do set cdate=%%D 
if "%date%"=="%mdate%" echo File modified today 
if not "%date%"=="%mdate%" echo File not modified today 
+1

['for'ループ](http://ss64.com/nt/for.html)および[arguments](http://ss64.com/nt/syntax-args.html)を参照してください。ファイルの最終更新日時を返すための修飾子 '〜t'があります。 '' for/F'ループ](http://ss64.com/nt/for_f.html)に '' delims = "'オプションを追加して日付と時刻の両方を取得するか、 '' tokens = 2 "' (おそらく、ロケールと地域の設定に応じて)時間だけを取得することができます。ところで、2つの 'if'文を組み合わせることができます:'%date% "=="%mdate% "(今日修正されたエコーファイル)。 – aschipfl

答えて

1

ここでは、内蔵ForFilesのコマンドを使用して、迅速な考えです:あなたの例と同様に

@Echo Off 
For %%A In ("C:\temp\file.txt") Do (If Not "%__CD__%"=="%%~dpA" PushD "%%~dpA" 
    ForFiles /M "%%~nxA" /D 0 /C^ 
    "Cmd /C Echo @File was modified [email protected] @fTime"2>Nul||(
    Echo "%%A" not modified today)) 
Pause 

は、このアイデアは、あなたが持つ3行目の括弧の間に1つのファイルを置き換えることができます:現在のディレクトリ内のすべてのファイルの出力に

  • *
  • "C:\temp\file1.txt" "C:\somewhere\fileZ.exe"複数の既知ファイルが出力されます。
    特記事項:PopDのないPushDを使用すると、異なるディレクトリの数が制限されることがあります。このオプションを使用する場合は、控えめに使用してください。

安全のため、これらのかっこの間のエントリを二重引用符で囲むことをおすすめします。

+0

Sweet、これを以下のようなtxtに出力できますか: '@Echo Off %% Inの場合(" C:\ temp \ file.txt ")Do(If"%__ CD __% "==" %% 〜DpA "PushD" %%〜dpA " ForFiles/M" %%〜nxA "/ D 0/C^ " Cmd/Cエコー@Fileが変更されましたtoday0x09 @ fDate @fTime >> "C:\ temp \ result .txt "" 2> Nul ||(エコー "%% A"は今日は変更されていません "C:\ temp \ result.txt")) Pause' それは間違っています。 – Tomas

+0

Doch( "%__ CD __%" == "%%〜dpA"でない場合)%% A In( "%__ CD __%" =% "%%〜dpA"% %0 dpA " ForFiles/M" %%〜nxA "/ D 0/C^ " Cmd/Cエコー@Fileが今日修正されました.0x09 @ fDate @fTime "2> Nul >> result.txt ||( エコー" %% A "今日は変更されていません>> result.txt) Pause' ありがとうございます。 – Tomas

関連する問題