1. ホーム
  2. windows

[解決済み] WindowsのIF内のバッチSETが機能しない

2022-05-13 09:38:27

質問

このスクリプトを(.batファイルから)実行しているとき。

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

いつももらう。

ECHO is on.

の意味するところは var2 変数が本当に設定されていなかったということです。 どなたか、その理由を理解する手助けをしていただけませんか?

どのように解決するのですか?

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

このとき var2 は空です。

したがって、delayedExpansion構文が存在し、それは ! の代わりに % で、これはパース時ではなく実行時に評価されます。

を使用するために ! を使うには、追加ステートメント setlocal EnableDelayedExpansion が必要です。

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