Odpowiedzi:
var2 jest ustawione, ale rozwinięcie w linii echo %var2%następuje przed wykonaniem bloku.
W tej chwili var2jest pusty.
Dlatego istnieje składnia delayedExpansion, która używa !zamiast %niej i jest oceniana w czasie wykonywania, a nie w czasie analizy.
Należy pamiętać, że aby skorzystać !, setlocal EnableDelayedExpansionpotrzebne jest dodatkowe oświadczenie .
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
&i &&. Ten kod set x=some & set y=%x%thing & echo results %y%wyprowadza %x%thing.
Trochę spóźniłem się na imprezę, ale innym sposobem radzenia sobie z tym stanem jest kontynuowanie procesu na zewnątrz if, w ten sposób
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Lub / i użyj gotoskładni
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
W ten sposób ekspansja następuje „w czasie” i nie jest to potrzebne setlocal EnableDelayedExpansion. Podsumowując, jeśli przemyślisz projekt swojego skryptu, możesz to zrobić w ten sposób
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause... i działa. „jeśli utworzysz zmienną w pliku wsadowym, do której będzie można uzyskać dostęp w dowolnym miejscu programu”. . aticleworld.com/batch-file-variables-and-scope