Antworten:
var2 ist gesetzt, aber die Erweiterung in der Zeile echo %var2%
erfolgt, bevor der Block ausgeführt wird.
Zu diesem Zeitpunkt var2
ist leer.
Daher ist die Syntax verzögerte Erweiterung vorhanden, die !
anstelle von verwendet wird %
und zur Ausführungszeit ausgewertet wird, nicht zur Analysezeit.
Bitte beachten Sie, dass zur Verwendung !
die zusätzliche Anweisung setlocal EnableDelayedExpansion
erforderlich ist.
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
&
und &&
Operatoren. Dieser Code wird set x=some & set y=%x%thing & echo results %y%
ausgegeben %x%thing
.
Ich bin ein bisschen spät , um die Partei , sondern eine andere Art und Weise mit diesem Zustand umzugehen , ist Prozess außerhalb fortzusetzen if
, wie dies
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Oder / und goto
Syntax verwenden
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
Auf diese Weise erfolgt die Erweiterung "rechtzeitig" und Sie brauchen sie nicht setlocal EnableDelayedExpansion
. Fazit: Wenn Sie das Design Ihres Skripts überdenken, können Sie es so machen
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause
.. und es funktioniert. "Wenn Sie eine Variable in der Batch-Datei erstellen, auf die überall im Programm zugegriffen werden kann." . aticleworld.com/batch-file-variables-and-scope