windowsのバッチファイルにやらせることなんてたいした内容じゃないんだけど、いかんせん文法が貧弱すぎて簡単なことなのに時間を食うのがいつものパターン。忘れないようにメモっておくよ。
ファイル生成をする際に、時々連番を使ったファイル名を使用したいという場合がある。まぁ大抵の場合、エクスプローラー上での見た目をよくするため、前ゼロ使って桁数を揃えるわけです。
先にコード載せるとこんな感じ。
http://gist.github.com/175608
@echo off :: test of "sequence number file" setlocal enabledelayedexpansion set prefix=C:\path\to\hoge. set extension=.bk set pad=2 for /l %%i in (1, 1, 15) do ( set num=00000%%i set file_path=%prefix%!num:~-%pad%!%extension% echo !file_path! ) pause
実行結果は
C:\path\to\hoge.01.bk C:\path\to\hoge.02.bk C:\path\to\hoge.03.bk C:\path\to\hoge.04.bk C:\path\to\hoge.05.bk C:\path\to\hoge.06.bk C:\path\to\hoge.07.bk C:\path\to\hoge.08.bk C:\path\to\hoge.09.bk C:\path\to\hoge.10.bk C:\path\to\hoge.11.bk C:\path\to\hoge.12.bk C:\path\to\hoge.13.bk C:\path\to\hoge.14.bk C:\path\to\hoge.15.bk 続行するには何かキーを押してください . . .
後はfile_pathを好きなコマンドに料理させてあげればよい。
前ゼロ付きまくりな数値を右から指定桁分取り出すだけだが、ちゃんと動かすまでに時間かかっちゃったなぁ...。
::でコメントになるって今まで知らんかった...。こっちの方がremよりも見やすくて良い。しかし、doブロック内で::使うとエラーになるのがなんだかなぁ...。
forループ中に宣言した変数を正しく展開するには
setlocal enabledelayedexpansion とやって遅延環境変数の展開機能を有効化しないとまずいらしい。展開するときは%ではなく!を使う。これを知らなくてすげーハマった。
参考:
連番フォルダ作成バッチ:.knowledge - frog.raindrop.jp
[窓] DOSでのforループ | 今日もねむひ(-。-)zZZ
CMD.EXEの遅延環境変数の展開 - KOBUN