猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

Windows

コマンドプロンプト(バッチ)でファイル毎の処理をする

投稿日:2012年12月23日 更新日:

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はファイル名ではなく更新日時を比較してくれるで、応用範囲は随分と広がるはずです。

Gooleアドセンス用336

Gooleアドセンス用336

-Windows
-

執筆者:

関連記事

windows

Wget for Windows(Windows版のwget)

linuxを使用する人の多くはwgetを利用したことがあるでしょう。 get、postが驚く程簡単に利用できます。 そしてコマンドなのでグラフィカルな点は劣りますが、 簡単にコピーや編集をしてバッチが …

windows

コマンドプロンプトの文字コードを変更する

めったに必要ありませんが、 コマンドプロンプトの文字コードはデフォルトではShift-jisです。 androidやwebの開発等でUTF-8にしたい場合もあります。 現在の文字コードを確認するには …

windows

windows8のコマンドプロンプトでcdでd:へ移動しない

いままでのos(xpなど)では c:\>cd d: でDドライブに移動できたとおもったのですが、 いつのまにか c:\>cd /d d: となっていました・・・。 D:>help c …

PHPでは文字列の比較に==を使用してはいけない

==を使用しても、文字列の比較にはなりません。 必ず「===」もしくは「strcmp」を使いましょう! 否定する場合は「!==」です。 もし「==」とすれば”00″は&#822 …

windows

Windowsのrouteに設定するインターフェイスのindex番号の確認方法

routeを追加する windowsでルートを登録するのは 宛先:192.168.2.10/255.255.255.0 Gateway:129.168.0.254 インターフェイス:0x001 の場合 …