forコマンドの階層化
ifコマンドの実行対象となるコマンドにifコマンドを指定することができるのと同様に、forコマンドの実行対象にforコマンドを指定することで、forコマンドを階層化できます。
バッチファイルは複雑なプログラムを書くのには適していないため、ロジックを記述するためにforコマンドを複雑に階層化することはめったにないと思われますが、ファイルやディレクトリの反復処理において、さらに個々のファイルを対象に何らかの反復処理を実行するといった場合に利用できるでしょう。
サンプル 03
@echo off
for %%i in (1 2 3 4 5 6 7 8 9) do (
for %%k in (1 2 3 4 5 6 7 8 9) do (
echo i=%%i, k=%%k
)
echo --
)
pause
実行結果
サンプル03の実行結果 |
サンプル03は、forコマンドの中に、さらに別のforコマンドを記述して、反復処理の中でさらに別の反復処理を実行しています。外側のforコマンドの変数は %%i、内側のforコマンドの変数は %%k です。内側のforコマンドの反復処理内でこれらの変数の値をechoコマンドを用いて出力しています。
処理の流れは、最初に外側のforコマンドが実行され、変数 %%i にセットの最初の値 1 が格納され、外側のforコマンドの実行対象となる内側のforコマンドが開始されます。
内側のforコマンドが実行されると %%k にセットの最初の値 1 が格納され、内側のforコマンドの実行対象となるechoコマンドが実行され変数の値が出力されます。
i=1, k=1
i=1, k=2
i=1, k=3
...
内側のforコマンドのセットに指定された値をすべて処理すれば、内側のforコマンドの処理を抜け出して、再び外側のforコマンドの処理に戻ります。変数 %%i に次の値が設定され、再び内側のforコマンドが実行されます。
i=2, k=1
i=2, k=2
i=2, k=3
...
これを、外側のforコマンドのセットに指定されたすべての値を処理するまで反復します。
i=9, k=1
i=9, k=2
i=9, k=3
...
i=9, k=9
あまり複雑な反復処理は、内部で何を行っているのかわからなくなってしまうので避けるべきですが、2 階層程度であれば実用できる場面もあるでしょう。より複雑な反復や制御、変数や計算を組み合わせる必要があるロジックが必要になってくると、マクロやプログラミング言語に委ねたほうが生産的だと考えられます。