CMD-Befehl – IF

Lesedauer 6 Minuten
Posted: So. 09.10.2022-18:40Updated: So. 09.10.2022-19:31

 ❓ Der DOS-Befehl IF verarbeitet Ausdrücke in einer Batchdatei abhängig von Bedingungen. Die ELSE-Klausel muss auf derselben Zeile mit dem Befehl

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.
Um einen Datenträger auf Laufwerk A zu formatieren und eine Fehlermeldung anzuzeigen, wenn während des Formatierungsprozesses ein Fehler auftritt, gibt man die folgenden Zeilen in eine Batch-Datei ein:
:begin
@echo off
format a: /s
if not errorlevel 1 goto end
echo Beim Formatieren ist ein Fehler aufgetreten.
:end
echo Ende des Batchprogramms.
Um die Datei “test.txt” aus dem aktuellen Verzeichnis zu löschen oder eine Meldung anzuzeigen, wenn “test.txt” nicht gefunden wird, gibt man die folgenden Zeilen in eine Batch-Datei ein:
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!

 

Bemerkungen
  • 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.

weiter zu FAQs

Dieser Beitrag wurde bisher 269 mal gelesen.