これら以外の方法でも不可能ではないと思われますが記述が非常に複雑になると思います。 シンプルな方法としては以下の2つがあるようです。
@echo off
for %%A in ("%PATH:;=";"%") do (
echo %%~A
)
ここでは変数置換構文(%VAR:...%
)が活用されています。
この構文の詳細はhelp set
にてご確認いただけます。
環境変数の置換は、次のように拡張されます:
%PATH:文字列 1 = 文字列 2%
は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列 1" を
"文字列 2" に置き換えます。
"文字列 2" に空の文字列を指定すると、展開された出力からすべての "文字列 1"
を削除することができます。
環境変数置換となっていますが、環境変数以外にも使えます。
上記の%PATH:;=";"%
では%PATH%
に含まれる;
を";"
に置換しており、
PATHにA;B;C;D
と含まれていた場合はA";"B";"C";"D
となります。
また当然"
でくくられているので、"A";"B";"C";"D"
となり、PATHに含まれるすべての項目を"
でくくることができています。
これによりforループで列挙できるという仕組みです。
それぞれの項目は"
でくくられているので、必要に応じて%%~A
として引用句を取り除いてください。(詳細はhelp for
)
加えて、forループの変数は次の点に注意してください。
バッチ プログラムで FOR コマンドを使用するときは、%変数の代わりに、
%%変数を使用してください。変数名では大文字と小文字が区別されるため、
%i と %I は異なります。
上記同様に置換にてセミコロンを処理に書き換えてしまう方法で、こちらはfor
すら使いません。
以下の構文はA,B,C,Dをechoします。
@echo off
set FILES=A;B;C;D
echo %FILES:;= & echo %
A;B;C;D
のそれぞれの;
は& echo
で置換され、A & echo B & echo C & echo D
となり、
先頭のecho
が加わると、echo A & echo B & echo C & echo D
となります。
複雑な処理は構文上不可能と思われますが、echoのような単純な処理の場合は非常に短い構文で済みます。