Windowsバッチ for 繰り返し制御
- for 基本形
- for /l : 指定回数繰り返し
- for オプション無し : ファイル対象繰り返し
- for /d : ディレクトリ対象繰り返し
- for /r ディレクトリパス : ディレクトリ配下(サブ含む)のファイル/ディレクトリ対象繰り返し
for 基本形
for文は、次のような形で記述する。
for (オプション) %%英字1文字 in (繰り返し対象) do (処理コマンド)
(オプション)とin (繰り返し対象)によって、どのように繰り返すかが決まり、
%%英字1文字が繰り返し変数となり、
(処理コマンド)が繰り返される処理内容になる。
%%英字1文字は、(処理コマンド)の中だけで有効である。
for /l : 指定回数繰り返し
for /l で、指定した回数の繰り返し制御ができる。
in (繰り返し対象)は、in (開始値, 増分値, 終了値)と記述する。
増分値は、負の数も設定可能。
echo in (0, 1, 4) の場合 for /l %%a in (0, 1, 4) do ( echo a=%%a ) echo in (2, 3, 8) の場合 for /l %%a in (2, 3, 8) do ( echo a=%%a ) echo in (3, -1, 0) の場合 for /l %%a in (3, -1, 0) do ( echo a=%%a )
in (0, 1, 4) の場合 a=0 a=1 a=2 a=3 a=4 in (2, 3, 8) の場合 a=2 a=5 a=8 in (3, -1, 0) の場合 a=3 a=2 a=1 a=0
for オプション無し : ファイル対象繰り返し
for オプション無しでは、ファイルを対象に繰り返し制御ができる。
in (繰り返し対象)は、in (ファイル名)と記述する。
ファイル名は、ワイルドカードを使って記述する。
「*」は1文字以上の任意の文字列で、「?」は任意の1文字として記述する。
ファイル名を相対パスで記述した場合は、カレントディレクトリから相対パスで示したファイルが、
ファイル名をフルパスを記述した場合は、その記述通りのファイルが、繰り返しの対象となる。
rem カレントディレクトリに rem a1.txt, b2.txt, c2.txt があるとして、 echo in (*.txt) の場合 for %%f in (*.txt) do ( echo file=%%f ) echo in (?2.txt) の場合 for %%f in (?2.txt) do ( echo file=%%f ) rem ディレクトリC:\dirAに rem aaa.txt, bbb.txt があるとして、 echo in (C:\dirA\*.txt) の場合 for %%f in (C:\dirA\*.txt) do ( echo file=%%f )
in (*.txt) の場合 file=a1.txt file=b2.txt file=c2.txt in (?2.txt) の場合 file=b2.txt file=c2.txt in (C:\dirA\*.txt) の場合 file=C:\dirA\aaa.txt file=C:\dirA\bbb.txt
for /d : ディレクトリ対象繰り返し
for /d では、ディレクトリを対象に繰り返し制御ができる。
これは、for オプション無しのディレクトリ版だと思えばよい。
rem カレントディレクトリに rem ディレクトリdirAA, dirBA, dirC2 があるとして、 echo in (dir*) の場合 for /d %%d in (dir*) do ( echo directory=%%d ) echo in (dir?A) の場合 for /d %%d in (dir?A) do ( echo directory=%%d )
in (dir*) の場合 directory=dirAA directory=dirBA directory=dirC2 in (dir?A) の場合 directory=dirAA directory=dirBA
for /r ディレクトリパス : ディレクトリ配下(サブ含む)のファイル/ディレクトリ対象繰り返し
for /r ディレクトリパスは、ディレクトリパス配下(サブディレクトリ含む)のファイルを対象に繰り返し制御ができる。
for /rだけでディレクトパスを記述しないと、カレントディレクトリ配下(サブディレクトリ含む)のファイルを対象に繰り返し制御ができる。
繰り返し変数の%%英字1文字は、フルパスの文字列となる。
for /r C:\test %%f in (*.txt) do ( echo file=%%f )
file=C:\test\a1.txt file=C:\test\b2.txt file=C:\test\c2.txt file=C:\test\aaa\dd.txt file=C:\test\dirAA\aa_1.txt file=C:\test\dirAA\aa_2.txt
また、in (繰り返し対象)を、in (.)と記述した場合は、
ディレクトリパス配下(サブディレクトリ含む)のディレクトリを対象に繰り返し制御ができる。
for /r C:\test %%d in (.) do ( echo directory=%%d )
directory=C:\test\. directory=C:\test\aaa\. directory=C:\test\dirAA\. directory=C:\test\dirAA\.