WindowsバッチSETがIF内で動作しない 質問する

WindowsバッチSETがIF内で動作しない 質問する

このスクリプトを実行する場合 (.bat ファイルから):

set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo %var2%
)

私はいつもこう思います:

ECHO is on.

つまり、var2変数は実際には設定されていません。 理由を理解するのを手伝ってくれる人はいますか?

ベストアンサー1

echo %var2%var2 は設定されていますが、ブロックが実行される前に行内の展開が発生します。
この時点ではvar2空です。

したがって、delayedExpansion 構文が存在し、!の代わりにが使用され%、解析時ではなく実行時に評価されます。

を使用するには!、追加のステートメントsetlocal EnableDelayedExpansionが必要になりますのでご注意ください。

setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
  set var2=myvalue
  echo !var2!
)

おすすめ記事