Respostas:
var2 é definido, mas a expansão na linha echo %var2%ocorre antes que o bloco seja executado.
Neste momento, var2está 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 gotosintaxe
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