4.2 for 文

for 文は、主に以下の形式で使用します。
  1. 指定リスト分だけ実行

    for %[変数名] in ([リスト]) do (
      [コマンド]
      ..........
    )
  2. 単調な整数リストに対して実行 (C 言語の for 文似)

    for /l %[変数名] in ([初期値],[増分],[終了値]) do (
      [コマンド]
      ..........
    )
  3. テキストファイルの各行に対して実行

    for /f "[オプション]" %[変数名] in ([ファイルリスト]) do (
      [コマンド]
      ..........
    )
if 文の場合と同様、実行するコマンドが 1 つしない場合は、1 行で

for %[変数名] in ([リスト]) do [コマンド]
for %[変数名] in ([リスト]) do ([コマンド])
のように書くことも可能です。

for 文の局所変数 %[変数名] の変数名は アルファベット 1 文字であること、およびバッチファイル内で使うときは、 %[変数名]%%[変数名]% を重ねる必要があることに注意してください。 この局所変数は、値を参照するときも、 set /a の右辺に書く場合でも %[変数名] (バッチファイル内では %%[変数名]) として使用します。

上の 1. の形式の場合は、リストには複数の文字列を書くことができ、 それが各変数に代入されてその分だけコマンドが実行されます。 リストの各要素の区切りは、スペースかカンマ (,) が使用できます。 リストとしてワイルドカードを含む文字列を指定した場合は、 ワイルドカードにマッチするファイル名を探してそれをリストの要素とします (ワイルドカードについては 6 節参照)。 例えば


> for %a in (dog cat mouse) do echo %a
とすると、%a には順番に dog, cat, mouse という文字列が代入されて、 そのそれぞれに対してコマンド「echo %a」が実行されるので、 結果として

dog
cat
mouse
と表示されることになります。

2. の形式は、C 言語の for 文とは増分指定 (C では 3 つ目)、 終了条件 (C では 2 つ目) の指定の順番が違いますが、 ほぼ似た使い方ができます。 増分や整数値には負の値も使用できます。例えば、


> for /l %a in (9,-2,-4) do echo %a
とすると、%a には順に 9,7,5,3,1,-1,-3 が代入されて do の後ろのコマンドが実行されます。

3. の形式では、「"[オプション]"」は省略することもできますが、 その場合は指定したファイルの各行の、 タブや空白で区切られた第 1 フィールド (最初の単語) を %[変数名] に代入してコマンドを実行します。 第 2 フィールド以降を利用したり、 フィールドの区切り文字を指定したりもできますが14、 それらに対するオプションの指定方法、 および 1., 2., 3. 以外の for 文の形式については、 for /? によるヘルプを参照してください。

竹野茂治@新潟工科大学
2014年5月2日