Batch-Skripte unter Windows (und zuvor DOS) sind eine feine Sache für einfache Automatisierung. Verschachtelt man allerdings If-Anweisungen und möchte man innerhalb dieser auch noch Variablen verwenden, so führt das mitunter in eine böse Falle.

Folgendes Beispiel funktioniert nicht:

@echo off

set Var1=1

if %Var1%==1 (
 set Test=True
 echo %Test%
)

Man würde erwarten das als Ausgabe “True” erscheint, stattdessen kommt ein “ECHO ist ausgeschaltet (OFF)”. Hintergrund ist, das Variablen innerhalb von If-Anweisungen anders behandelt werden. Lösbar ist das Ganze wie folgt:

@echo off

setlocal enabledelayedexpansion

set Var1=1

if %Var1%==1 (
 set Test=True
 echo !Test!
)

Relevant ist neben dem einleitenden “setlocal enabledelayedexpansion” das innerhalb der If-Anweisung statt Prozent- Ausrufezeichen verwendet werden.

Eine Variable die innerhalb einer If-Anweisung definiert wurde, kann außerhalb der Anweisung wie gewohnt mit den Prozentzeichen verwendet werden:

@echo off

setlocal enabledelayedexpansion

set Var1=1

if %Var1%==1 (
 set Test=True
)

echo %Test%

Quelle:

stackoverflow – ERRORLEVEL inside IF