Respostas:
var2 é definido, mas a expansão na linha echo %var2%
ocorre antes que o bloco seja executado.
Neste momento, var2
está vazio.
Portanto, a sintaxe delayedExpansion existe, ela usa em !
vez de %
e é avaliada no tempo de execução, não no tempo de análise.
Observe que, para usar !
, setlocal EnableDelayedExpansion
é necessária a declaração adicional .
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
&
e &&
. Este código é set x=some & set y=%x%thing & echo results %y%
gerado %x%thing
.
Estou um pouco atrasado para a festa, mas outra forma de lidar com essa condição é continuar o processo fora if
, assim
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Ou / e use goto
sintaxe
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
Desta forma a expansão ocorre "no tempo" e você não precisa setlocal EnableDelayedExpansion
. Resumindo, se você repensar o design do seu script, você pode fazer assim
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause
.. e está funcionando. "se você criar uma variável no arquivo em lote, ela poderá ser acessada em qualquer lugar do programa." . aticleworld.com/batch-file-variables-and-scope