【バッチ】ifなどの中でsetが効かない(SETLOCAL ENABLEDELAYEDEXPANSION)

Sponsored Links

バッチファイルでコマンドを書いているときに、setしたいものがifやforなどのファンクションの中で設定できない時がある。

set string=Hello
echo STRING IS +++++++%string%+++++++

このときはstringにはHelloが入っている。
これと同じことをifやforの中で行うと、stringの中には何も入らず、+++++のみが出力されてします。

これを回避するために、SETLOCAL ENABLEDELAYEDEXPANSIONをバッチの最初の方に下記、変数を使用する際の%を!に変更する。

set string=Hello
echo STRING IS +++++++!string!+++++++

if文などのファンクションの実行のされ方が、「 SETLOCAL ENABLEDELAYEDEXPANSION 」がない状態では、ifが実行されるときに、ifの中のスクリプトは読み込まれてしまい、ifの中が一行ずつ処理されず、ifの中で変数をセット、その変数を使う としたときに、その変数はifが始まる前の値がifの中では使用されることとなる。
「 SETLOCAL ENABLEDELAYEDEXPANSION 」を設定することで、ifの中でも1行ずつ処理してくれることとなる。

set string=Hello
REM この時点ではstringはHello
if xxxx(
  set string=HelloHello
  REM ここでもstringはHelloHelloではなく、ifは始まる前のHelloが定義されたままとなる
  REM SETLOCAL ENABLEDELAYEDEXPANSIONを使うことで、ここでstringがHelloHelloとなる
)

IT
Sponsored Links
Sponsored Links
Sponsored Links
ようさんチョットでぶ
Copied title and URL
Bitnami