Odpowiedzi:
var2 jest ustawione, ale rozwinięcie w linii echo %var2%
następuje przed wykonaniem bloku.
W tej chwili var2
jest 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 EnableDelayedExpansion
potrzebne 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 goto
skł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