IF verarbeitet Ausdrücke in einer Batchdatei abhängig von Bedingungen.
IF [NOT] ERRORLEVEL Nummer Befehl IF [NOT] Zeichenfolge1==Zeichenfolge2 Befehl IF [NOT] EXIST Dateiname Befehl
NOT Befehl wird nur dann ausgeführt, wenn die Bedingung nicht erfüllt ist.
ERRORLEVEL Zahl
Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm einen Code größer oder gleich der Nummer zurückgibt.
Zeichenfolge1==Zeichenfolge2
Bedingung ist erfüllt, falls die Zeichenfolgen gleich sind.
EXIST Dateiname Bedingung ist erfüllt, wenn die angegebene Datei existiert. Befehl Gibt den Befehl an, der bei erfüllter Bedingung ausgeführt werden soll. Diesem Befehl kann das Schlüsselwort ELSE folgen. Der Befehl nach dem Wort ELSE wird ausgeführt, wenn die angegebene Bedingung nicht erfüllt ist (FALSE).
Die ELSE-Klausel muss auf derselben Zeile mit dem Befehl nach IF stehen.
Zum Beispiel:
IF EXIST test.txt ( del test.txt ) ELSE ( echo test.txt fehlt )
Die beiden folgenden Beispiele funktionieren nicht. Im ersten Fall wird der DEL-Befehl nicht durch ein Zeilenende abgeschlossen:
IF EXIST test.txt del test.txt ELSE echo test.txt fehlt
In zweiten Fall befindet sich der ELSE-Befehl nicht auf derselben Zeile mit dem IF Schlüsselwort:
IF EXIST test.txt del test.txt ELSE echo test.txt fehlt
Hier ein Beispiel, wie alles auf einer Zeile angegeben werden kann:
IF EXIST test.txt (del test.txt) ELSE echo test.txt fehlt
Wenn die Befehlserweiterungen aktiviert sind, wird der IF-Befehl folgendermaßen verändert:
IF [/I] Zeichenfolge1 Vergleichsoperator Zeichenfolge2 Befehl IF CMDEXTVERSION Zahl Befehl IF DEFINED Variable Befehl
Mögliche Vergleichsoperatoren:
EQU - gleich (equal)
NEQ - nicht gleich (not equal)
LSS - kleiner als (less than)
LEQ - kleiner als oder gleich (less than or equal to)
GTR - größer als (greater than)
GEQ - größer als oder gleich (greater than or equal to)
Die /I-Option wird angegeben, um die Groß-/Kleinschreibung beim Vergleich zu ignorieren. Die /I-Option kann auch in der Form “Zeichenfolge1==Zeichenfolge2” von “IF” verwendet werden. Diese Vergleiche sind allgemein, das heißt, wenn beide Zeichenfolgen nur aus Ziffern bestehen, werden die Zeichenfolgen in Zahlen umgewandelt, und es wird ein numerischer Vergleich durchgeführt.
Die Bedingung “CMDEXTVERSION” arbeitet genau wie “ERRORLEVEL”, nur dass dabei mit einer internen Versionsnummer der Befehlserweiterungen verglichen wird. Die erste Versionsnummer ist “1”. Diese wird um eins erhöht, wenn bedeutende Verbesserungen an den Befehlserweiterungen vorgenommen werden. Die Bedingung “CMDEXTVERSION” ist falsch, wenn die Befehlserweiterungen nicht aktiviert sind.
Die Bedingung “DEFINED” arbeitet genau wie “EXIST”, bezieht sich aber auf den Namen einer Umgebungsvariablen und ist wahr, wenn die Umgebungsvariable definiert ist.
Der Ausdruck “%ERRORLEVEL%” wird zu einer Zeichendarstellung des aktuellen Werts der Variablen “ERRORLEVEL” expandiert (vorausgesetzt, es ist nicht bereits eine Umgebungsvariable mit dem Namen “ERRORLEVEL” vorhanden, deren Wert dann zurückgegeben würde). Nachdem ein Programm ausgeführt wurde, gestaltet sich die Verwendung von “ERRORLEVEL” wie folgt:
goto Antwort%ERRORLEVEL% :Antwort0 echo J für Ja eingegeben :Antwort1 echo N für Nein eingegeben
Auch die oben aufgeführten numerischen Vergleiche können verwendet werden:
IF %ERRORLEVEL% LEQ 1 goto ok
Der Ausdruck “%CMDCMDLINE%” wird zu der ursprünglichen Befehlszeile expandiert, die “CMD.EXE” vor einer beliebigen Bearbeitung übergeben wird (vorausgesetzt, es ist nicht bereits eine Umgebungsvariable mit dem Namen “CMDCMDLINE” vorhanden, deren Wert dann zurückgegeben würde).
Der Ausdruck “%CMDEXTVERSION%” wird zu einer Zeichendarstellung des aktuellen Werts der Variablen “CMDEXTVERSION” expandiert (vorausgesetzt, es ist nicht bereits eine Umgebungsvariable mit dem Namen “CMDEXTVERSION” vorhanden, deren Wert dann zurückgegeben würde).
Beispiele basierend auf Microsoft Learn
if not exist test.txt echo Datei nicht gefunden.
:begin @echo off format a: /s if not errorlevel 1 goto end echo Beim Formatieren ist ein Fehler aufgetreten. :end echo Ende des Batchprogramms.
IF EXIST test.txt ( del test.txt ) ELSE ( echo Die Datei test.txt fehlt. )
Hinweis: Diese Zeilen können wie folgt in einer einzelnen Zeile kombiniert werden:
IF EXIST test.txt (del test.txt) ELSE (echo Die Datei test.txt fehlt.)
Um den Wert der ERRORLEVEL-Umgebungsvariablen nach dem Ausführen einer Batchdatei zu wiederholen, gibt man die folgenden Zeilen in die Batchdatei ein:
goto answer%errorlevel% :answer1 echo Das Programm hat Fehler 1 zurückgegeben. goto end :answer0 echo Das Programm hat Fehler 0 zurückgegeben. goto end :end echo Done!
-
Wenn die in einer if-Klausel angegebene Bedingung TRUE ist, wird der Befehl ausgeführt, der auf die Bedingung folgt. Wenn die Bedingung FALSE ist, wird der Befehl in der if-Klausel ignoriert, und der Befehl führt jeden Befehl aus, der in der else-Klausel angegeben ist.
-
Wenn ein Programm beendet wird, wird ein Exitcode zurückgegeben. Um Exitcodes als Bedingungen zu verwenden, verwenden Sie den errorlevel-Parameter .
-
Wenn Sie definiert verwenden, werden der Umgebung die folgenden drei Variablen hinzugefügt: %errorlevel%, %cmdcmdline%, und %cmdextversion%.
-
%errorlevel%: Wird in eine Zeichenfolgendarstellung des aktuellen Werts der ERRORLEVEL-Umgebungsvariablen erweitert. Diese Variable geht davon aus, dass noch keine Umgebungsvariable mit dem Namen ERRORLEVEL vorhanden ist. Wenn vorhanden, erhalten Sie stattdessen diesen ERRORLEVEL-Wert.
-
%cmdcmdline%: Wird in die ursprüngliche Befehlszeile erweitert, die vor der Verarbeitung durch Cmd.exe an Cmd.exe übergeben wurde. Dabei wird davon ausgegangen, dass noch keine Umgebungsvariable mit dem Namen CMDCMDLINE vorhanden ist. Wenn vorhanden, erhalten Sie stattdessen diesen CMDCMDLINE-Wert.
-
%cmdextversion%: Wird in die Zeichenfolgendarstellung des aktuellen Werts von cmdextversion erweitert. Dabei wird davon ausgegangen, dass noch keine Umgebungsvariable mit dem Namen CMDEXTVERSION vorhanden ist. Wenn vorhanden, erhalten Sie stattdessen diesen CMDEXTVERSION-Wert.
-
-
Sie müssen die else-Klausel in derselben Zeile wie der Befehl nach dem if verwenden.
Dieser Beitrag wurde bisher 269 mal gelesen.