Skip to content

Instantly share code, notes, and snippets.

@retorillo
Created February 27, 2018 12:22
Show Gist options
  • Save retorillo/dfd82c02c08c853e0ffed496ff2b8b61 to your computer and use it in GitHub Desktop.
Save retorillo/dfd82c02c08c853e0ffed496ff2b8b61 to your computer and use it in GitHub Desktop.

バッチでセミコロン区切りのPATHをループ処理する

これら以外の方法でも不可能ではないと思われますが記述が非常に複雑になると思います。 シンプルな方法としては以下の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のような単純な処理の場合は非常に短い構文で済みます。

参考: https://stackoverflow.com/questions/5471556/pretty-print-windows-path-variable-how-to-split-on-in-cmd-shell

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment