回答:
var2が設定されていますecho %var2%
が、行が展開される前にブロックが実行されます。
現時点でvar2
は空です。
したがって、delayedExpansion構文が存在し、!
代わりに使用%
され、解析時ではなく実行時に評価されます。
を使用する!
には、追加のステートメントsetlocal EnableDelayedExpansion
が必要です。
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
&
and &&
演算子と同じルール。このコードはをset x=some & set y=%x%thing & echo results %y%
出力します%x%thing
。
私はパーティーに少し遅れますが、この状態に対処する別の方法はif
、このように外でプロセスを続けることです
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
または/およびgoto
構文を使用
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
この方法では、「時間内に」拡張が行われ、は必要ありませんsetlocal EnableDelayedExpansion
。要するに、スクリプトのデザインを考え直せば、そのようにすることができます。
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause
あり、機能しています。「プログラム内のどこからでもアクセスできる変数をバッチファイルに作成する場合」。 aticleworld.com/batch-file-variables-and-scope