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 innehalb 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%