when I'm running this script (from a .bat file):
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo %var2%
)
I always get:
ECHO is on.
Meaning the var2
variable was not really set.
Can anyone please help me understand why?
when I'm running this script (from a .bat file):
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo %var2%
)
I always get:
ECHO is on.
Meaning the var2
variable was not really set.
Can anyone please help me understand why?
I am a bit late to the party but another way to deal with this condition is to continue process outside if
, like this
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Or/and use goto
syntax
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
This way expansion occurs "in time" and you don't need setlocal EnableDelayedExpansion
. Bottom line, if you rethink design of your script you can do it like that
var2 is set, but the expansion in the line
echo %var2%
occurs before the block is executed.At this time
var2
is empty.Therefore the delayedExpansion syntax exists, it uses
!
instead of%
and it is evaluated at execution time, not parse time.Please note that in order to use
!
, the additional statementsetlocal EnableDelayedExpansion
is needed.