Пакет окон SET внутри IF не работает
когда я запускаю этот script (из файла .bat):
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo %var2%
)
Я всегда получаю:
ECHO is on.
Значение переменной var2
не было действительно задано.
Может ли кто-нибудь помочь мне понять, почему?
Ответы
Ответ 1
переменная var2 установлена, но раскрытие в строке echo %var2%
происходит до выполнения блока.
В это время var2
пуст.
Поэтому синтаксис delayedExpansion существует, он использует !
вместо %
и оценивается во время выполнения, а не во время разбора.
Обратите внимание, что для того, чтобы использовать !
необходим дополнительный оператор setlocal EnableDelayedExpansion
.
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
Ответ 2
Я немного опоздал на вечеринку, но другой способ справиться с этим условием - продолжить процесс на улице, 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
. В итоге, если вы переосмыслите дизайн своего скрипта, вы можете сделать это так