Alle Windows-Kommandos

Liste der Windows-Kommandozeilentools - Kommandos und -Befehle unter MS Windows

Liste der Windows-eigenen Kommandos

if

Übersicht

Befehl
Kurzbeschreibung
Syntax
Beispiele
     existiert eine bestimmte Datei?
     Existiert ein bestimmtes Verzeichnis?
     Status des cmd-Fensters mit Farbe und Titel kennzeichnen


Befehlif
KurzbeschreibungVerarbeitet 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 kennzeichnen

Den Status der Arbeitsgänge kann man mit Hilfe von Bildschirmfarben kennzeichnen, z.B.
  • schwarzer Hintergrund und dunkelgraue Schrift, wenn ein Prozess arbeitet
  • blauer Hintergrund und weisse Schrift, wenn eine Benutzerinteraktion erwartet wird
  • zum Abschluss: grüner Hintergrund = OK oder roter Hintergrund= Fehler
Gerade, wenn ein Prozess länger dauert (Defragmentieren der Festplatte oder ein längeres Backup), braucht man nicht immer ein geöffnetes cmd-Fenster. Mit Hilfe des Title-Kommandos kann vor Start einer Aktion der Titelzeile ein (hilfreicher) Text eingeblendet werden. Dann sieht man selbst bei verkleinertem cmd-Fenster in der Taskleiste, was gerade im Skript passiert.

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


Übersicht