Die Unterstützung der verzögerten Erweiterung von Umgebungsvariablen wurde hinzugefügt. Standardmäßig ist sie deaktiviert. ...

Die Unterstützung der verzögerten Erweiterung von Umgebungsvariablen wurde
hinzugefügt. Standardmäßig ist sie deaktiviert. Sie kann mit der
Befehlszeilenoption /V von CMD.EXE aktiviert/deaktiviert werden.
Siehe CMD /?

Die verzögerte Erweiterung von Variablen verbessert die Möglichkeiten der
Variablenerweiterung. Bisher wurden die Variablen beim Lesen des Texts, und
nicht bei dessen Ausführung, erweitert. Das folgende Beispiel zeigt ein
Problem, das dabei auftritt:

    set VAR=vorher
    if "%%VAR%%" == "vorher" (
        set VAR=nachher;
        if "%%VAR%%" == "nachher" @echo Es funktioniert!
    )

Die Meldung würde nie angezeigt, weil %%VAR%% in beiden IF-Befehlen
beim Lesen des ersten IF-Befehls erweitert wird, weil es logisch zu diesem
gehört. Daher vergleicht der zweite IF-Befehl "vorher" mit "nachher" was nie
gleich sein kann. Auch das folgende Beispiel funktioniert nicht wie erwartet:

    set LISTE=
    for %%i in (*) do set LISTE=%%LISTE%% %%i
    echo %%LISTE%%

Es wird KEINE Liste der Dateien im aktuellen Verzeichnis erstellt, stattdessen
erhält LISTE den Namen der letzten Datei als Wert. Dies ist der Fall, weil
%%LISTE%% nur einmal beim Lesen des IF-Befehls erweitert wird. Zu diesem
Zeitpunkt ist LISTE leer.
Die FOR-Schleife, die tatsächlich ausgeführt wird, lautet:

    for %%i in (*) do set LISTE= %%i

Hiermit wird der Variablen LISTE immer wieder der letzte Dateiname
zugewiesen.
 
Die verzögerte Erweiterung von Umgebungsvariablen erlaubt es, eine
Umgebungsvariable, unter Verwendung eines weiteren Zeichens (dem
Ausrufezeichen), zur Laufzeit zu erweitern. Mit aktivierter verzögerter
Erweiterung von Umgebungsvariablen können obige Beispiele wie folgt geschrieben
werden:

    set VAR=vorher
    if "%%VAR%%" == "vorher" (
        set VAR=nachher
        if "!VAR!" == "nachher" @echo Es funktioniert!
    )

    set LISTE=
    for %%i in (*) do set LISTE=!LISTE! %%i
    echo %%LISTE%%