このスクリプトを実行しているとき(.batファイルから):
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo %var2%
)
私はいつも得る:
ECHO is on.
var2
変数が実際に設定されていないことを意味します。誰かが私が理由を理解するのを手伝ってくれますか?
このスクリプトを実行しているとき(.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!
)
私はパーティーに少し遅れていますが、この状態に対処する別の方法は、この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
。要するに、スクリプトの設計を再考すれば、そのようにすることができます