web-dev-qa-db-ja.com

変更されたファイルの日付とバッチファイルの現在の日付の比較

いくつかのことをするためにバッチファイルを書く必要があります

最初は問題は非常に単純だと思っていました。指定したディレクトリにあるtxtファイルの変更日を取得し、その日付を現在の日付と比較して、同じであるかどうかを確認しました。そうでない場合は、他のことを行います。

現在の日付をキャプチャするために使用する行は次のとおりです。

%date%

指定したファイルの変更日をキャプチャするために使用する行は次のとおりです。

SET filename="C:\New Folder\New.txt"
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
ECHO %filedatetime:~0,-6% >> %destination%

上記の場合、echoを使用して何が返されるかを確認しているので、日付が返されたように見えますが、追加の情報を取得しています。

2012/02/19 02

上記の値を比較できる場合の取得方法と、適切に比較する方法を知りたいです。

10
Kalim

私は dbenham's が好きですが、コードを機能させたい場合は、次のようにします。

set currentDate=%date%
SET filename="C:\MyFile.txt"

FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
IF %filedatetime:~0, 10% == %currentDate% goto same

goto notsame

:same
echo Dates the same, do some code here

goto next

:notsame
echo Dates NOT the same, do some code here
goto end

:next

あなたが再びそれを必要とする場合に備えてあなたの方法を機能させる方法を知ることは価値があると思いました。

10
SmithMart

日付での作業は、バッチでははるかに困難です。

この場合、作業を簡単にするコマンドが1つあります。 FORFILESには、特定の日付以降に変更されたファイルを処理する機能があります。コマンドラインからFORFILES /?を使用して、その使用に関するドキュメントを取得します。

この簡単なコマンドは、今日変更されたすべてのファイルを一覧表示します。

forfiles /m * /d 0

少なくとも1つのファイルが見つかった場合、ERRORLEVELは0に設定されます。それ以外の場合、ERRORLEVELは1に設定されます。

特定のファイルがあるので、

forfiles /m %filename% /d 0
if %errorlevel% == 0 (
  echo The file was modified today
  REM do whatever else you need to do
) else (
  echo The file has not been modified today
  REM do whatever else you need to do
)

上記を行うためのより簡潔な方法があります。 &&演算子は、前のコマンドが成功した場合にコマンドを条件付きで実行するために使用され、||は、前のコマンドが失敗した場合にコマンドを条件付きで実行するために使用されます。ただし、||コマンドが失敗した場合、&&コマンドも実行されるので注意してください。

forfiles /m %filename% /d 0 && (
  echo The file was modified today
  REM do whatever else you need to do
) || (
  echo The file has not been modified today
  REM do whatever else you need to do
)
15
dbenham

ForFiles Microsoft TechNetのForFilesのドキュメント を説明しているTechNet記事に追加されたコメントで発生した問題とは別に、言及されている別の問題がありますが、タイムゾーンが無視されていることに関する行の間を読んだ場合のみです。 ForFilesはローカル時刻で報告された変更日を評価するため、02:01 ESTで変更されたファイルをolder02:59 EDTで変更されたファイルより.

2
David A. Gray