forでファイル毎の処理をする
コマンドプロンプトのforには強力な/Fオプションがあります。
set yyyy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% cd c:\xxx for /F %%a in ('dir /b /s *%yyyy%%mm%%dd%*.dmp') do "c:\yyy\zzz.exe" %%a
コマンドプロンプトで動作確認する場合は%%aは%です。
dirに/bをつけるとファイル名のみ取得できます。
dirに/sをつけるとサブディレクトリも表示します。
これで特定の日付yyyymmddとなまえのついたファイルを処理することができます。
しかしコマンドプロンプトには大きな問題があり、日付処理が面倒です :x001:
前日のファイルとなるとレベルがかなりあがります。
webで検索すればサンプルは多くありますが、テストも大変です。
powrshellやvbsを使う方法もありますが今回紹介するのはforfilesを利用する方法です。
forfilesでファイル毎の処理をする
forfiles /P c:\xxx /m *.dmp /D -7 /c "cmd /c c:\yyy\zzz.exe @path"
これで更新日時が7日以上経過しているものだけに処理ができます。
forfilesの/Pは検索するディレクトリを指定。
forfilesの/mはマスク。
forfilesの/Dがポイントとなる更新日時の指定です。
/D -7で更新日時が7日以上経過しているもの。/D +0としたら今日以降(未来日)のものになります。
日付には /D +2012/01/01とすれば指定日以降となります。
一つ難点を言わせてもらえば、昨日以降のもの(昨日~未来)としたい場合には、結局前日の計算が必要になるわけですが、1週間以上経過したものを削除する!といった場合には大いに利用できるはずです。
最後にサンプルです。
rem 1週間以上前のzipファイルを削除 forfiles /P c:\directory /m *.zip /D -7 /c "cmd /c del @path" rem 今日作成されたdmpをLhacaをつかってzipに圧縮 forfiles /P c:\directory /m *.dmp /D +0 /c "cmd /c c:\Lhaca\Lhaca.ex @path"
forfilesはファイル名ではなく更新日時を比較してくれるで、応用範囲は随分と広がるはずです。