質問: バッチファイルで一つのファイルをdirで比較し分岐 バッチファイルでフォルダにある全てのファイルに対し ファイルごとにdir /t:cとdir /t:wで比較し 同じならば削除 異なれば何もしない 処理をしたく質問させて頂きました 次のような結果の場合日時が同じなのでファイルを削除する c:\>dir d:\aaa\001.jpg /t:c ドライブ d のボリューム ラベルは microsd です ボリューム シリアル番号は e484-83b8 です d:\aaa のディレクトリ 2012/11/28 12:59 1,284 001.jpg 1 個のファイル 1,284 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 c:\>dir d:\aaa\001.jpg /t:w ドライブ d のボリューム ラベルは microsd です ボリューム シリアル番号は e484-83b8 です d:\aaa のディレクトリ 2012/11/28 12:59 1,284 001.jpg 1 個のファイル 1,284 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 日時が異なるので何もしない c:\>dir d:\aaa\002.jpg /t:c ドライブ d のボリューム ラベルは microsd です ボリューム シリアル番号は e484-83b8 です d:\aaa のディレクトリ 2012/11/07 03:12 1,443,326 002.jpg 1 個のファイル 1,443,326 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 c:\>dir d:\aaa\002.jpg /t:w ドライブ d のボリューム ラベルは microsd です ボリューム シリアル番号は e484-83b8 です d:\aaa のディレクトリ 2012/11/04 17:53 1,443,326 002.jpg 1 個のファイル 1,443,326 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 またもっと簡単にdir d:\aaa /t:cとdir d:\aaa /t:wの結果で 分岐処理は可能でしょうか よろしくお願いします
回答: @echo off cd /d d:\aaa for %%a in (*) do ( for /f "tokens=1,2" %%b in ('dir "%%a" /t:c ^| findstr /b 2') do ( for /f "tokens=1,2" %%d in ('dir "%%a" /t:a ^| findstr /b 2') do ( if "%%b %%c" == "%%d %%e" del "%%a" ) ) ) 秒単位で違う場合も同じ時刻と見なしちゃうけど、それはしょうがない。 vbscriptを使うと、秒単位で時刻がとれます。