CMD IF

Kommandozeilenbefehle: ÜbersichtVariablenERRORLEVEL
Die wichtigsten Befehle: dirchkdskcdmdrdtreedelattribifxcopyrobocopy

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.

 


 

Skills

Posted on

16. Oktober 2022

Submit a Comment

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .

Skills

Posted on

16. Oktober 2022

Cookie Consent Banner von Real Cookie Banner