Kommandozeilenbefehle: Übersicht • Variablen • ERRORLEVEL
Die wichtigsten Befehle: dir • chkdsk • cd • md • rd • tree • del • attrib • if • xcopy • robocopy
Der Befehl IF
Mit dem Befehl „if“ sind Verzweigungen in Stapeldateien möglich.
Wenn Sie den Befehl „if“ eingeben, gefolgt von „ /?“, sehen Sie eine Übersicht der Befehlsparameter:
C:\Users\Klaus\Documents>if /? C:\Users\Admin>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 NEQ - nicht gleich LSS - kleiner als LEQ - kleiner als oder gleich GTR - größer als GEQ - größer als oder gleich 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 vorge- nommen 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 (voraus- gesetzt, 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 Befehls- zeile 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 (voraus- gesetzt, es ist nicht bereits eine Umgebungsvariable mit dem Namen "CMDEXTVERSION" vorhanden, deren Wert dann zurückgegeben würde). C:\Users\Klaus\Documents>
Bei Vergleichen mit Operatoren (== NEQ GTR …) muss immer auf beiden Seiten etwas stehen, sonst gibt es einen Syntaxfehler.
Also nie prüfen
if %test% == Fritz
sondern
if (%test%) == (Fritz) oder if "%test%" == "Fritz"
Warum? Wenn %test% nicht definiert ist, würde sich der Befehl if %test% == Fritz in if == Fritz verwandeln. Was das bedeuten soll, versteht der Kommandointerpreter nicht und stoppt mit einem Syntaxfehler.
if defined
Damit wird überprüft, ob es eine Variable überhaupt gibt.
if NOT defined test (echo Variable „test“ ist nicht definiert) else echo Die Variable „test“ hat den Wert %test%
if exist
Damit wird überprüft, ob eine Datei vorhanden ist.