Liste der Windows-eigenen Kommandos
if
BefehlKurzbeschreibung
Syntax
Beispiele
existiert eine bestimmte Datei?
Existiert ein bestimmtes Verzeichnis?
Status des cmd-Fensters mit Farbe und Titel kennzeichnen
Befehl | if |
Kurzbeschreibung | Verarbeitet Ausdrücke in einer Batchdatei abhängig von Bedingungen. |
Syntax | Hinweis: Dies ist ein internes Kommando. Kommando zum Anzeigen der Hilfe: 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 Nummer 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 der Zeile mit dem Befehl nach dem 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 Dabei kann der Vergleichsoperator einer der folgenden sein: 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 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 nummerischer 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 werden, wenn bedeutende Verbesserungen an den Befehlserweiterungen gemacht 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 Umgebungs- variable definiert ist. Der Ausdruck %ERRORLEVEL% wird zu einer Zeichendarstellung des aktuellen Werts der Variablen ERRORLEVEL expandiert (vorausgesetzt, es gibt nicht bereits eine Umgebungsvariable mit dem Namen ERRORLEVEL, deren Wert man dann erhält). Nachdem ein Programm ausgeführt wurde, sieht die Verwendung von ERRORLEVEL wie folgt aus: goto Antwort%ERRORLEVEL% :Antwort0 echo J für Ja eingegeben :Antwort1 echo N für Nein eingegeben oder unter Verwendung der Vergleichsoperatoren: IF %ERRORLEVEL% LEQ 1 goto ok Der Ausdruck %CMDCMDLINE% wird zu der originalen Befehlszeile expandiert, die CMD.EXE vor irgendeiner Bearbeitung übergeben wird (vorausgesetzt, es gibt nicht bereits eine Umgebungsvariable mit dem Namen CMDCMDLINE, deren Wert man dann erhält). Der Ausdruck %CMDEXTVERSION% wird zu einer Zeichendarstellung des aktuellen Werts der Variablen CMDEXTVERSION expandiert (vorausgesetzt, es gibt nicht bereits eine Umgebungsvariable mit dem Namen CMDEXTVERSION, deren Wert man dann erhält). |
Beispiele |
existiert eine bestimmte Datei?Schlüssel zum Erfolg ist das Kommando "exist".Anbei eine Bat-Datei, die prüft, ob der erste übergebene Parameter eine existierende Datei ist: @echo off if exist %1 goto TUWAS echo ERROR: Datei "%1" nicht gefunden! goto ENDE :TUWAS echo Jepp - die Datei "%1" existiert... - ich zeige sie mal an: type "%1" :ENDE s.a. » goto Existiert ein bestimmtes Verzeichnis?Wiederum kann man dies mit "if exist" prüfen. Genaugenommen prüft exist das Vorhandensein von einer Datei oder aber einem Verzeichnis. Um abzusichern, dass es sich um ein Verzeichnis und eben nicht um eine Datei handelt, kann man auf das Gerät nul zurückgreifen. Dieses befindet sich scheinbar in jedem Verzeichnis:if exist [Verzeichnis]/nul [auszuführendes Kommando, wenn Datei existiert] Anbei eine Bat-Datei, die prüft, ob der erste übergebene Parameter ein existierendes Verzeichnis ist: @echo off if exist %1/nul goto TUWAS echo ERROR: Verzeichnis "%1" nicht gefunden! goto ENDE :TUWAS echo Jepp - das Verzeichnis "%1" existiert... - ich liste es auf: dir "%1" :ENDE Eine andere Möglichkeit wäre der Aufruf des dir-Kommandos, wo man mit Hilfe des Parameters /a die gewünschten File-Attribute angibt. dir /a:d "%1" >nul s.a. » dir Status des cmd-Fensters mit Farbe und Titel kennzeichnenDen Status der Arbeitsgänge kann man mit Hilfe von Bildschirmfarben kennzeichnen, z.B.
Das nachfolgende Beispiel-Skript durchsucht rekursiv die Laufwerke (entspr. Variable sDrive) nach Dateien und/ oder Ordnern nach einem regulären Ausdruck im Ordner- und Dateinamen. @echo off rem ------------------------------------------------------------ :: CONFIG rem ------------------------------------------------------------ set scriptname=Dateisuche :: zu durcsuchende Laufwerke set sDrives=C D E :: Farben set colWork=color 08 set colWait=color 17 rem ------------------------------------------------------------ :: MAIN rem ------------------------------------------------------------ %colWork% title %scriptname% echo xxxxx ORDNER/ DATEI-SUCHE xxxxx echo Dieses Skript sucht auf den Laufwerken %sDrives% echo Ordner und Dateinamen nach einem angegebenen Muster (Regex moeglich). %colWait% set /p dmuster=Dateimuster eingeben: if "%dmuster%"=="" exit %colWork% for %%d in (%sDrives%) do ( title %scriptname% - durchsuche %%d nach %dmuster% ... dir /s /b %%d:\ | findstr "%dmuster%" ) echo fertig. title %scriptname% - fertig. %colWait% pause && exit rem ------------------------------------------------------------ s.a. » color » dir » exit » for » pause » set » title |