Dieser Befehl ist so etwas wie die Basis einer jeden Programmiersprache. Er funktioniert im Prinzip wie eine Weiche. In Abhängigkeit einer Bedingung können nachfolgende Befehle ausgeführt werden oder auch nicht.
Grundsyntax
IF [NOT] Bedingung Befehl
IF [NOT] Bedingung (Befehl) ELSE (Befehl)
[NOT]: Negiert das Ergebnis der Bedingung.
Bedingung: Eine Bedingung kann wahr oder falsch sein. Ein solches Ergebnis kann durch verschiedene Vergleiche erzielt werden (s.u.).
Befehl: wird ausgeführt, wenn die Bedingung erfüllt wird.
ELSE: wird ausgeführt, wenn die Bedingung nicht erfüllt wird. Im ELSE-Teil kann ein weiterer IF-Befehl durchgeführt werden. Dies ist auf alle Syntax-Arten von IF anwendbar.
Beispiel:
@echo off
SET /P Test=Eingabe:
IF %Test% GTR 0 (
ECHO Test ist größer als 0
) ELSE (
IF %Test% EQU 1 (
ECHO Test ist gleich 1
) ELSE (
ECHO Test ungleich 1
)
)
PAUSE
Anmerkung: Zwischen den Klammern und ELSE muss sich ein Leerzeichen befinden.
Wert-Syntax
Siehe Vergleichsoperatoren.
IF [/I] [NOT] var1 Vergleichsoperator var2 Befehl
Datei-Syntax
IF [NOT] EXIST Dateiname Befehl
EXIST: Liefert wahr oder falsch über die (nicht- [NOT]) Existenz der nachfolgenden Datei bzw. Verzeichnisses.
Dateiname: Absoluter oder relativer Datei- oder Verzeichnispfad. Hier können auf Wildcards (%) benutzt werden
Beispiel:
@ECHO OFF
REM Prüfe ob die Datei Datei.txt im gleichen Verzeichnis vorhanden ist.
IF EXIST Datei.txt ECHO Datei vorhanden
REM Prüfe ob die Datei Datei.txt im Verzeichnis c:\ vorhanden ist.
IF EXIST c:\Datei.txt ECHO Datei vorhanden
REM Beispiele mit Wildcards
IF EXIST c:\Datei.* ECHO Datei vorhanden, egal mit welcher Erweiterung
IF EXIST c:\*Datei*.txt ECHO Datei mit 'Datei' irgendwo im Name vorhanden, mit der Erweiterung '.txt'
Anmerkung: Hier ist 'EXIST Dateiname' die Bedingung. Das Ergebnis ist entweder wahr oder falsch und funktioniert ohne Vergleichsoperatoren.
IF [NOT] ERRORLEVEL zahl Befehl
IF [NOT] CMDEXTVERSION zahl Befehl
IF [NOT] DEFINED Variable Befehl
ERRORLEVEL: Der Errorlevel enthält die Fehlernummer des zuletzt ausgeführten Befehls. Der Standard ist null. Kann auch i.V.M dem CHOICE Befehl ausgewertet werden.
CMDEXTVERSION: Im Betriebssystem Windows NT liefert er den Wert 1. Alle späteren Systeme liefern den Wert 2.
DEFINED: Prüft, ob eine Variable einen Wert enthält ist (Alternativ geht auch "%Var%"=="").
Beispiele:
@ECHO OFF
IF %ERRORLEVEL%==0 ECHO Alles in Ordnung
IF ERRORLEVEL 0 ECHO Liefert wahr, wenn der Errorlevel 0, 1, 5 oder 64 beträgt.
IF ERRORLEVEL 1 ECHO Liefert wahr, wenn der Errorlevel 1, 5 oder 64 beträgt.
IF NOT ERRORLEVEL 1 ECHO Liefert wahr, wenn der Errorlevel kleiner 1 ist.
IF %CMDEXTVERSION%==1 ECHO Das aktuelle Betriebssystem ist Windows NT.
IF DEFINED var ECHO Die Variable var ist definiert mit dem Wert %var%
Direkt hintereinander geschrieben, werden zwei IF-Klauseln zu einer UND-Klausel.
REM Mit einer Variable, die zwei Vrgleichen ausgesetzt wird
set var=10
if %var% GEQ 5 if %var% LSS 20 (
ECHO %var% ist größer gleich als 5 und kleiner als 20
) ELSE (
ECHO Beide Bedingungen sind falsch
)
REM Mit zwei Variablen, die zwei unterschiedliche Vergleiche durchlaufen
set var1=10
set var2=20
if %var1% EQU 10 if %var2% LEQ 100 echo %var1% ist gleich 10 und %var2% ist kleiner gleich 100
Leider gibt es kein direktes oder. Dies lässt sich nur indirekt lösen. Eine Möglichkeit ist über eine dritte Variable (Siehe folgendes Beispiel). Am besten ist jedoch das Schreiben einer Funktion OR.bat.
@ECHO OFF
REM Die Variable 'Ergebnis' mit falsch vordefinieren. Im folgenden IF-Block wird sie nur verändert, wenn eine Bedingung zutrifft.
SET Ergebnis=falsch
SET var1=10
SET var2=test
IF %var1% LSS 5 SET Ergebnis=wahr
IF %var2%==test Ergebnis=wahr
IF %Ergebnis%==wahr (
ECHO Eine von beiden Bedingungen trifft zu.
) ELSE (
ECHO Beide Bedingungen sind falsch.
)
PAUSE