Befehl: if

 IF bewirkt bedingungsabhängige Verarbeitung in einem Stapelprogramm.
  IF ist ein BATCH-DATEI / AUTOEXEC.BAT Befehl.
  Er kann aber auch in der Kommandozeile verwendet werden.

Syntax:

  IF [NOT] ERRORLEVEL Nummer Befehl
  IF [NOT] Zeichenkette1==Zeichenkette2 Befehl
  IF [NOT] EXIST Dateiname Befehl
     Laufwerk   Der Laufwerksbuchstabe, z.B.: C:
     Pfad       Der zu wählende Pfad, z.B.: \Beispiel\
     Dateiname  Die zu wählende Datei, z.B.: test.txt

Optionen:

  NOT                Gibt an, daß der Interpreter den Befehl nur dann
                     ausführen soll, wenn die Bedingung nicht zutrifft.
                     (Ohne dies wird der Befehl ausgeführt, wenn die
                     Bedingung wahr ist).
  ERRORLEVEL Nummer  Ergibt eine wahre Bedingung, falls das zuletzt aus-
                     geführte Programm einen Ausgangscode zurückgegeben
                     hat, der gleich oder größer als die spezifizierte
                     Nummer ist.
  Befehl             Spezifiziert den bei zutreffender Bedingung auszu-
                     führenden Befehl.
  Zeichenkette1==Zeichenkette2
                     Ergibt eine wahre Bedingung, falls die spezifizierten
                     Zeichenketten übereinstimmen.
  EXIST Dateiname    Ergibt eine wahre Bedingung, falls die spezifizierte
                     Datei existiert.
  /I string==STRING  Ignoriert Groß- / Kleinschreibung.

Kommentar:

  Die Varianten beziehen sich auf den Abschnitt "Syntax".
  Variante 1: IF führt den angegebenen "Befehl" bedingt aus. Wenn das
  Schlüsselwort NOT angegeben wird, wird die Bedingung negiert, d.h.
  der "Befehl" wird ausgeführt, wenn die Bedingung "FALSCH" ergibt.
  Die erste Bedingung ist erfüllt, wenn die angegebene Datei existiert.
  Wildcards werden unterstützt. Auf lokalen Dateisystemen kann man auch
  auf Zeichengeräte testen.
  Die zweite Variante gibt den Wert WAHR aus, wenn dem ERRORLEVEL
  aktuell eine Zahl zugewiesen ist, die größer oder gleich der ange-
  gebenen Zahl ist.
  ERRORLEVEL / EXITCODES werden zugewiesen, wenn externe Befehle
  sich beenden oder aber durch die Befehle CANCEL oder QUIT.
  Aus Gründen der Kompatibilität zu anderen DOS-Shells überprüft FreeCOM
  nicht, ob der angegebene ERRORLEVEL eine Zahl ist, sondern akzeptiert
  stillschweigend auch einen beliebige Zeichenfolge. Diese erlaubt die
  Verwendung der sogenannten Benny-Levels, bei denen man HA, HB, ... ,
  HZ oder xa, xb, ... , xz anstelle von 1, 2, ... , 26. angeben kann.
  Einige missgestaltete Batch-Skripte verwenden diese Syntax, um die
  Zuordnung von Errorlevels auf Laufwerksbuchstaben besser sichtbar zu
  machen. Siehe Beispiel 5.
  Die dritte und vierte Variante sind WAHR, wenn die linke Zeichenkette
  die gleiche Groß- / Kleinschreibung wie die Zeichenkette auf der
  rechten Seite des doppelten Gleichheitszeichens hat.
  Beide Seiten können in doppelte Anführungszeichen gesetzt werden, aber
  wenn die rechte Seite nicht in Anführungszeichen gesetzt ist, wird nur
  das erste Wort geprüft.
  IF ist ein interner Befehl, d.h. der Befehl ist in der command.com
  enthalten. Es wird zur Ausführung des Befehls kein zusätzlicher
  Befehl (Datei) benötigt.

Beispiel:

  Beispiel 1:
    IF NOT EXIST c:\command.com ECHO Es gibt keine COMMAND.COM in C:\
  Führt den ECHO Befehl aus, wenn die Datei C:\COMMAND.COM nicht
  existiert.

  Beispiel 2:
    IF EXIST c:\FREEDOS\nul GOTO have_fdos_directory 
  Verzweigt die Interpretation des Batch-Skriptes auf das Label ":have
  _fdos_directory", wenn die Datei C:\FREEDOS\NUL existiert. Da der
  Dateiname NUL dem zeichenorientierten Gerät NUL: entspricht, welches
  immer existiert, kann dieser Test verwendet werden, um die Existenz
  des Pfades C:\FREEDOS zu prüfen, da alle zeichenorientierten Geräte
  praktisch in jedem Verzeichnis eines lokalen Dateisystems vorhanden
  sind.

  Beispiel 3:
    IF %1==Name ECHO Das erste Argument ist "Name"
  ECHO wird ausgeführt, wenn das erste Argument des aktuellen Batch-
  Skripts "Name" (ohne Anführungszeichen) ist. %1 kann zu einer beliebigen
  Zeichenkette expandieren, auch mit eingebetteten Leerzeichen, aber ohne
  eingebettetes doppeltes Gleichheitszeichen. Außerdem werden im Argument
  enthaltene Metazeichen ausgewertet.

  Beispiel 4:
    IF "%1"=="erster Name" ECHO Das erste Argument ist "erster Name"
  ECHO wird ausgeführt, wenn das erste Argument des aktuellen Batch-
  Skripts "erster Name" (ohne Anführungszeichen )ist.
  %1 kann zu einer beliebigen Zeichenkette expandieren, auch mit
  eingebetteten Lerzeichen oder einem eingebetteten doppelten Gleichheits-
  zeichen oder Metazeichen.

  Beispiel 5 (Siehe Kommentar, Variante 2):
    "program"   (Der Errorlevel bezieht sich auf "program")
    SET drv=
    FOR %%Z IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO
    IF ERRORLEVEL H%%Z SET drv=%%Z
    (Kommentar: Die zwei obigen Zeilen sind in Wirklichkeit EINE Zeile)
    IF ERRORLEVEL 27 SET drv=
    IF "%drv%"=="" goto error_no_drive_letter

  Angenommen, dass „program“ den Exitcode für den Laufwerksbuchstaben
  auf 1..26 setzt, z.B. bei der Suche nach RAMdisks, weist dieser
  Codeschnipsel den Laufwerksbuchstaben der UMGEBUNGSVARIABLE drv zu bzw.
  setzt im Fehlerfall die Variable zurück.
  
  Anmerkung: Der folgende Code ist mit dem obigen identisch und voll-
             ständig mit allen Shells kompatibel:
    "program"
    SET drv=
    IF ERRORLEVEL 1 SET drv=A (Der Errorlevel bezieht sich auf "program")
    IF ERRORLEVEL 2 SET drv=B
    IF ERRORLEVEL 3 SET drv=C
    ...
    IF ERRORLEVEL 25 SET drv=Y
    IF ERRORLEVEL 26 SET drv=Z
    IF ERRORLEVEL 27 SET drv=
    IF "%drv%"=="" goto error_no_drive_letter
  Unter ERRORLEVEL / EXITCODE gibt es weitere Beispiele.

  Beispiel 6:
    IF "example"=="EXAMPLE" echo Hallo Welt!  (Hallo Welt! wird nicht
                                              angezeigt!)
    If /I "example"=="EXAMPLE" echo Hallo Welt!  (Hallo Welt! wird
                                              angezeigt!)

Siehe auch:

  autoexec.bat/fdauto.bat
  errorlevel/exitcode

  FreeDOS Befehle, die IF / ERRORLEVEL / EXITCODE unterstützen:
  assign     attrib     chkdsk     choice     ctmouse
  defrag     deltree    diskcomp   fc         fdisk
  find       format     goto       join       keyb
  mode       replace    shsucdx    subst      swsubst
  tdsk       xcopy      pcisleep   shsufdrv   touch
  xgrep

  Copyright © 2004 Robert Platt, aktualisiert 2011
  und 2024 von W. Spiegl.

  Diese Datei ist abgeleitet vom FreeDOS Spezifikationen-HOWTO.
  Vgl. auch die Datei H2Cpying bezüglich der Kopierbedingungen.