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.