2006.03.08

バッチファイルで日付フォルダを作成

コマンドプロンプトでの一連操作をまとめて実行してくれる
*.bat 形式のファイルでは、特有の条件式や繰り返し構文があります。

その繰り返し構文の For ですが
    For %a In ( a b c d ) Do Echo %a
上記のようにすると 『a』『b』『c』『d』が順に表示されます。

また
    For %a In ( *.txt ) Do Echo %a
とすると現在のフォルダ内で拡張子 .txtのファイル名だけが順に表示されます。
(もちろん表示だけでなく、それを引数に他のコマンドの実行もできます)
 
 
 
ここまでは古く DOSと呼ばれる時代から使い方の変っていない部分なのですが、
昨今では新しい使い方もできるようになっているということを知りました。

例えば
    For /F %a In ( 'date /t' ) Do Echo %a
上記のようにすると、date /t の実行結果を表示します。
Unixでいうところのバッククォートのような動作です。

また対象を“解析”した結果とすることも可能です。
    For /F "tokens=1,2,3 delims=/ " %a In ('date /t') Do Echo %a%b%c
とすることでデリミタ区切りの何番目かのトークンを取り出すことができます。
正規表現のグループ検索に近いかもしれません。
(なぜ %b とか %c とかなのは深く追求しちゃいけないようですが)
例では今日の日付を YYYYMMDD 形式で表示することができます。
 
 
で、これを利用することで 今日の日付(YYYYMMDD形式)のフォルダを作成することが可能です。
    For /F "tokens=1,2,3 delims=/ " %a In ('date /t') Do MkDir %a%b%c

今までは、SQLServerの力を借りて
    iSql /Usa /Ppassword /Sserver /dpubs /Q "Exit(SELECT Convert(VarChar, GetDate(), 112))"
    MkDir %ERRORLEVEL%
なんて無理やりな裏技を使ったりしていましたが、それももう過去のことですか。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ichikawa