FOR ループの構文
Windows のコマンドプロンプト(バッチファイル)で使用可能な FOR ループの構文は以下のようになっています。
FOR 反復変数 IN (集合) DO コマンド
反復変数
反復変数 の部分には、集合 の要素を順次取り出して処理するための変数を宣言します。%%a ~ %%z、および、%%A ~ %%Z が使用でき、大文字と小文字は区別されます。
バッチファイル内では、%%A のようにパーセント記号を 2 つ使用しますが、コマンドプロンプトから直接入力する場合は、%A のようにパーセント記号は 1 つにする必要があります。
集合
集合 の部分には、ループで処理したいファイルやディレクトリの集合、数値の範囲などを指定します(指定方法は後述)。
コマンド
コマンド の部分には、繰り返し実行される処理を記述します。この中で反復変数を参照することで、各要素ごとの処理を行います。パイプや括弧を使ったグループ化により、複数のコマンドを記述することができます。
ループ内で複数のコマンドを実行したい場合は、次のように括弧でコマンド群を囲みます。
複数行に分けて記述できるので読みやすいです。
FOR 反復変数 IN (集合) DO (
コマンド1
コマンド2
コマンド3
)
FOR ループの具体的な使用方法
数値のループ処理 (/L)
FOR コマンドに /L オプションを使用すると、指定した数値の範囲、ステップでループ処理 を行うことができます。
集合 の部分には「開始、ステップ、終了」の値をカンマで区切って指定します。
@echo off
FOR /L %%A IN (0, 1, 3) DO echo %%A0
1
2
3
ステップには、負の数値を指定することもできます。
FOR /L %%A IN (6, -3, 0) DO echo %%A6
3
0
ファイル集合、文字列リテラルに対するループ
FOR コマンドを オプションなし で実行する場合、集合 には ファイル集合(あるいは単なるテキスト) を指定したものとみなされます。
ファイル名そのものを指定したり、ワイルドカードを使用した指定を行えます。
FOR %%A IN (*) DO echo %%AFOR %%A IN (*.txt) DO echo %%Aファイル集合は、スペースで区切って複数指定することができます。
FOR %%A IN (*.cpp *.h) DO echo %%Aファイル集合をループで処理するときに /R <ディレクトリ> オプションを指定すると、指定されたディレクトリ内のファイルを再帰的に検索してくれます。
FOR /R . %%A IN (*) DO echo %%A集合 部分に、スペースで区切られた文字列リテラルが指定された場合、単純にそれらのテキストが順に処理されます(同名のファイルが存在するかどうかは関係ありません)。
FOR %%A IN (aaa bbb ccc) DO echo %%Aディレクトリ集合に対するループ
FOR コマンドで /D オプションを使用すると、ディレクトリの集合 をループ処理できます。
主な使用方法は、ファイル集合に対するループと同様です。
FOR /D %%A IN (*) DO echo %%AFOR /R . /D %%A IN (*) DO echo %%A応用例
コマンド 部分に FOR コマンドを指定すれば、2 つ以上の FOR コマンドを入れ子で処理できます。
@echo off
FOR %%A IN (aaa bbb ccc) DO (FOR %%B IN (%%A\*.txt) DO echo %%B)aaa\1.txt
aaa\2.txt
bbb\1.txt
bbb\2.txt
ccc\1.txt
集合 の部分に変数を指定すれば、変数内の値をループで処理することができます。
@echo off
setlocal
set FRUITS=apple,banana,orange
FOR %%A IN (%FRUITS%) DO echo %%Aapple
banana
orange