Bat gleichen fenster

Diese Liste ist nicht vollständig, weitere Befehle werden in den anderen Kapiteln dieses Buches erklärt. Mit der Zeit sollen alle Befehle in diese Liste übertragen werden, um aus den anderen Kapitel referenziert werden zu können.

Vorsicht Leerzeichen![Bearbeiten]

Fehlplatzierte oder fehlende Leerzeichen können beim Programmieren einer Batch-Datei zu Fehlern führen. Bei den nachfolgenden Beispielen ist also auf die Platzierung von Leerzeichen und auf entsprechende Bemerkungen genau zu achten. Scheinbar grundlose Abbrüche beim Ausführen einer Batch-Datei können ebenfalls fehlplatzierten oder fehlenden Leerzeichen geschuldet sein.

Schaltet die Ausgabe der Befehlszeile auf dem Bildschirm nur für den aktuellen Befehl aus und ist selbst kein eigener Befehl.

Syntax

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)
8

Stapelanweisung: Ab MS-DOS bis Windows 7

Beispiel:

Inhalt

echo Diese Zeile wird mit Befehlszeile ausgeführt...
@echo und diese ohne!

Ausgabe

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!

In Batch Files verhindert "@echo off" zu Beginn des Skriptes die Ausgabe aller (!) Befehlszeilen auf dem Bildschirm bis die Stapelverarbeitung beendet wird, abbricht oder mittendrin ein "@echo on" Befehl erfolgt, um z. B. Befehlszeilen tatsächlich anzuzeigen und dann auszuführen. Kommentare (mit :: oder REM) werden dadurch natürlich auch nicht mehr ausgegeben, was nur als Nebeneffekt ausfällt.

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.

Ohne @echo off:

C:\>:: Dieser Kommentar wird so angezeigt

Syntax:

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)
9

Web-Links:

Erklärung:

Zur verzögerten Übersetzung von Variablen. Bewirkt, dass die Variable nicht zur Kompilierzeit sondern erst zur Laufzeit übersetzt wird (setzt die Verwendung von SETLOCAL zur Aktivierung von verzögerter Übersetzung voraus)

Verwendung:

Beispielsweise zur besser differenzierten Ausführung von For-Schleifen siehe LINK

Beispiele:

Inhalt der Batchdatei

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!

Ausgabe (unter XP)

first second

Erklärung:

Sprungmarke für ein Unterprogramm bzw. eine Kommentarzeile.
Sprungmarken werden benötigt, wenn mittels der Batchdatei eine Bedingung überprüft und erfüllt bzw nicht erfüllt wird und entsprechend weiter verfahren werden soll.
Mit dem Batchbefehl

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
00 wird die Sprungmarke angesprungen.


Anmerkung:

Der Doppelpunkt hat auch die Funktion der Manipulation von Variablen, wenn er direkt hinter einer Variablen steht. Siehe Kapitel "Variablen" in dieser Publikation.


Syntax

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
01

Sprungmarken können eine beliebige Länge haben, unter MS-DOS und älteren Windows-Versionen werden allerdings nur die ersten 8 Zeichen beachtet, der Rest wird ignoriert. Kommen in einer Batch also

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
02 und
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
03 vor, so wird unter Umständen nur die erste beim Aufruf einer der Beiden gefunden. Also besser
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
04 oder
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
05 schreiben. Groß- und Kleinschreibung wird nicht unterschieden. Man kann jedoch mithilfe von Anführungszeichen dafür sorgen, dass der komplette Sprungname beachtet wird (Beispielsweise :"Sprungname"). Wenn man den kompletten Code mit Sprungmarken verbindet, kann man zur besseren Unterscheidung verschiedener Sprungmarken eine Leerzeile verwenden.

Beispiel:

Inhalt

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END

Sofern die Datei

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
06 existiert, wird sie mit
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
07 geöffnet, sonst wird das Unterprogramm übersprungen und die Batchdatei bei der Marke
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
08 fortgesetzt, also beendet.

Seit die Befehlserweiterungen aktiviert sind, steht in Batchdateien die Sprungmarke

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
09 zur Verfügung, welche sich unsichtbar am Ende der Batch-Datei befindet.

:: (doppelter Doppelpunkt)[Bearbeiten]

Syntax

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
10


Erklärung:

Der

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
11 kann zur Einleitung eines "Kommentars" verwendet werden, ist aber eigentlich ein Spezialfall der Verwendung vom Doppelpunkt (Label). Eine ausführliche Erklärung zu Kommentaren findet sich beim Befehl REM. Die Verwendung des doppelten Doppelpunkts funktioniert innerhalb von Abfragen und Schleifen nicht - der REM-Befehl hingegen schon. Es ist daher besser, den doppelten Doppelpunkt überhaupt nicht zu verwenden und REM zu bevorzugen.


Beispiel:

Inhalt der Batchdatei

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl

Ausgabe der Batchdatei

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl

Die Zeile "Ich bin ein Kommentar" bleibt bei der Ausführung "unberücksichtigt".


Beispiel, in dem :: nicht funktioniert:

Inhalt der Batchdatei

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)

Ausgabe der Batchdatei

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
0

Mit

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
12 kann man eine andere Batch-Datei aufrufen. Sobald diese beendet wurde, wird die ursprüngliche Batchdatei weiter ausgeführt.

Beispiel:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
1
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
2

Die Ausgabe wenn man die Datei Call.cmd startet:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
3

Wenn die Befehlserweiterungen aktiviert sind (Standard ab Windows 2000) kann man auch Sprungmarken aufrufen (und auch Parameter übergeben):

Beispiel:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
4

Die Ausgabe:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
5

Beispiel mit Parameter:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
6

Die Ausgabe:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
7
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
8

Dieser Befehl springt automatisch zum Ende der Batchdatei (beendet die aktuelle Prozedur)

Anzeige der aktuellen CodePage oder Setzen einer neuen CodePage (change codepage)

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
9

Beispiele für nnn:

  • 437 – Die ursprüngliche Zeichensatztabelle des IBM-PC
  • 720 – Arabisches Alphabet
  • 737 – Griechisches Alphabet
  • 850 – westeuropäische Sprachen (DOS-Latin-1)
  • 857 – Türkisches Alphabet
  • 866 – Kyrillisches Alphabet
  • 1252 - DOS8 Umlaute werden richtig Codiert

Mit

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
13 (clear screen) wird der Bildschirm gelöscht.

Syntax

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
13

Interner Befehl: Ab MS-DOS bis Windows 8

Beispiel:

Inhalt

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
0


Ausgabe

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
1

Syntax:

  • Windows 2000, XP, Vista, 7, 8 und 10
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
15entspricht dem Batch-Befehl COMMAND (CMD ist unter DOS nicht vorhanden)


Web-Links:


Erklärung:

Der Befehl CMD startet eine neue Instanz des Kommandozeileninterpreters (cmd.exe).


Verwendung:

In Kombination mit dem Befehl START öffnet sich die neue Instanz auch in einem neuen Kommandozeilenfester (ohne START öffnet sie sich im gleichen Fenster).


Beispiele:

Inhalt der Batchdatei

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
2

Ausgabe (unter XP)

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
3

Ausgabe (unter Vista)

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
4

Ausgabe (unter Win 7)

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
5

Ausgabe (unter Win 8 Beta)

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
6

Ausgabe (unter Win 10)

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
7

Mit dem Befehl COLOR kann man die Vorder- und Hintergrundfarbe verändern. Die COLOR Werte bestehen aus zwei HEX-Werten, wobei der erste HEX-Wert für die Hintergrundfarbe und der zweite HEX-Wert für die Vordergrundfarbe steht. Jede Ziffer kann einen der folgenden Werte annehmen:

HEX-WertFarbe0Schwarz1Dunkelblau2Dunkelgrün3Blaugrün4Dunkelrot5Lila6Ocker7HellgrauHEX-WertFarbe8Dunkelgrau9BlauAGrünBZyanCRotDMagentaEGelbFWeiß

Der folgende Befehl ergibt z.B. einen blauen Hintergrund mit weißer Schrift. (Ähnlichkeit mit dem Bluescreen in älteren Windows Versionen)

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
8

Zum Zurücksetzen der Vorder- und Hintergrundfarbe wird COLOR einfach ohne Argumente aufgerufen.

@echo off
:: Verhindert, dass dieser Kommentar angezeigt wird.
9

(Unter Windows 10 nicht mehr anwendbar) Syntax:

  • DOS, Windows 95, 98, 98 SE, ME
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
16


Web-Links:

---


Erklärung/Verwendung:

Startet einen neuen Kommandointerpreter, dieser kann mit

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
17 wieder beendet werden.

Beispiel:

Inhalt

C:\>:: Dieser Kommentar wird so angezeigt
0

Ausgabe (unter Windows 95)

C:\>:: Dieser Kommentar wird so angezeigt
1

Gibt das aktuelle Datum aus und ermöglicht dem Benutzer die Änderung des Datums. Wird der Befehl mit dem Parameter /t aufgerufen, so wird nur das aktuelle Datum ausgegeben.

DATE kann auch als Variable benutzt werden, so kann man zum Beispiel mit %date:~6,4% auf das Jahr zugreifen.

Beispiele:

C:\>:: Dieser Kommentar wird so angezeigt
2
C:\>:: Dieser Kommentar wird so angezeigt
3
C:\>:: Dieser Kommentar wird so angezeigt
4

Hier werden vom Datum die ersten 6 Zeichen weggelassen und dann vier Stellen angezeigt. Bei time funktioniert das analog.

C:\>:: Dieser Kommentar wird so angezeigt
5

Bei einigen Betriebssystemversionen erfordert das Ändern des Systemdatums administrative Rechte.
XP: Die Ausgabe des Datumsformates ist abhängig von den Einstellungen in den Regions- und Sprachoptionen (Systemsteuerung)

Hinweis: Die Uhrzeit lässt sich mit dem Befehl "TIME" ermitteln.

Gibt einen Text aus oder schaltet die Befehlszeilen an/aus. Wenn ein Text ausgegeben wird, können dort auch Variablen angezeigt werden, wie z. B. die Variable %ver% (in Windows XP %os%).

Syntax:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
18 oder alternativ
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
19

Interner Befehl: Ab MS-DOS bis Windows NT 5.1 (XP)

Beispiel:

Inhalt

C:\>:: Dieser Kommentar wird so angezeigt
6

Ausgabe

C:\>:: Dieser Kommentar wird so angezeigt
7

Mit

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
20 können Sie zudem leere Zeilen ausgeben. Beispiel:

Inhalt

C:\>:: Dieser Kommentar wird so angezeigt
8

Ausgabe

C:\>:: Dieser Kommentar wird so angezeigt
9

Benutzereingaben mit ECHO[Bearbeiten]

Mit Hilfe des

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
21-Befehls können Sie auch in einem Skript Benutzereingaben simulieren, indem Sie den Pipe-Operator | verwenden.
Beispiel: Uhrzeit anzeigen ohne Nachfrage
Das normale Verhalten des
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
22-Befehls ist, die aktuelle Zeit der verwendeten Systemuhr anzuzeigen und in der nächsten Zeile die Eingabe einer neuen Uhrzeit zu erwarten. Drückt man auf Enter, bleibt die Systemzeit unverändert. Will man die Zeit nur anzeigen lassen (z. B. in einer Batchdatei vor und nach einer Befehlsfolge, um zu messen, wie lange der PC dafür braucht), lässt sich die Betätigung der Enter-Taste durch einen entsprechenden
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
21-Befehl ersetzen.

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
0

Über den Pipe-Mechanismus lässt sich darüber hinaus die Zeile „Geben Sie die neue Uhrzeit ein:“ unterdrücken:

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
1

Dabei ist die Groß-/Kleinschreibung von "neue" zu beachten oder der Schalter

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
24 zu verwenden, denn
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
25 ist case-sensitiv! Diese Beispiele dienen allerdings nur zur Demonstration, denn die Zeitausgabe wäre auch ohne Pipes (aber erst ab Windows 2000) möglich mit:

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
2

oder einfach:

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
3

Sehr nützlich ist das

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
21-Piping auch zur Übergabe von Benutzereingaben, welche von einzelnen Befehlen abgefragt werden.
Beispiel: Überprüfung einer Festplatte

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
4

kann (da es sich beim Laufwerk C um das Systemlaufwerk handelt) erst nach einem Systemstart ausgeführt werden. Normalerweise müsste der Benutzer deswegen den Systemstart durch Eingabe von "Y" bestätigen. Diese Aktion kann man in einem Batch so abbilden:

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
5

.

Syntax:

  • Windows XP, Windows Vista, Windows 7, Windows 10
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
27

Verwendung:

Zeigt an, ob der letzte Befehl erfolgreich war. Zum Prüfen ob der letzte Befehl ohne Fehler war, kann der folgende Code verwendet werden:

Dann kann im Fehlerfall etwas (...) gemacht werden. Dies funktioniert auch wenn der Errorlevel >= 1 ist.

Beispiel

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
6
  • del %homepath%\Desktop\Ordner = Im Homepath (C:\Users\Username) wird im Ordner "Desktop" der Ordner "Ordner" gelöscht.
  • echo %Errorlevel% = Errorlevel wird angezeigt. 1 bedeutet "Befehl fehlgeschlagen", 0 bedeutet "Befehl ausgeführt". 2 bedeutet "Unbekannt".

ENDLOCAL / (SETLOCAL)[Bearbeiten]

Syntax:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
28


Links:


Verwendung:

Schliesst den Befehl SETLOCAL ab. Siehe SETLOCAL

Der Befehl

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
17 beendet die Abarbeitung der Batchdatei, die Abarbeitung einer Unterroutine bzw. die cmd.exe Instanz (das Kommandozeilenfenster).

Syntax:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
30

Wird keinangegeben, bleibt ein zuvor gesetzter Errorlevel unverändert.

Als Parameter kann derangegeben werden, der an das aufrufende Programm bzw. die aufrufende Routine zurückgegeben wird. Aufrufende Routinen können ihn dort als Errorlevel auswerten.

Wird /B in einer Batchdatei angegeben, endet nur die Batchdatei (oder die Unterroutine) und nicht die CMD.exe. Auf der Kommandozeile wird /B ignoriert.

Achtung:

Die Reihenfolge der Parameter ist einzuhalten: ein /B nach demwird ignoriert.

Beispiele:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
31

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
32

Links:

Ermöglicht die Schleifenbearbeitung.

Syntax:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
33

Interner Befehl: Ab MS-DOS bis Windows NT 6.1 (Windows 7)

ACHTUNG:

Die Variable darf nur aus einem Buchstaben bestehen! "%t" ist erlaubt, "%test" nicht! Bei der Verwendung mehrerer Befehle muss zwischen "DO" und der Klammer "(" ein Leerzeichen sein.

Falsch

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
7

RICHTIG

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
8

Beispiel:

Zeigt alle Dateien im Verzeichnis %temp% an. Es werden nur Dateien, keine Verzeichnisse angezeigt. Um Verzeichnisse anzuzeigen siehe Liste der FOR-Optionen unten. Der Parameter

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
34 bewirkt, dass alle Unterverzeichnisse mit einbezogen werden (Rekursive Schleife).

Inhalt

Setlocal EnableDelayedExpansion

Set _var=first

Set _var=second& Echo %_var% !_var!
9

Ausgabe

first second
0


Zählschleifen

Mit solchen Schleifen kann man Aktionen eine bestimmte Anzahl oft ausführen. Dazu muss man den Parameter /L angeben.

Syntax:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
35

first second
1

Ausgabe:

first second
2

verschachtelte Zählschleife:

first second
3

Ausgabe:

first second
4

Weitere Möglichkeiten der FOR-Schleife:

syntax-FOR-Files

first second
5

syntax-FOR-Files-Rooted at Path

first second
6

syntax-FOR-Folders

first second
7

syntax-FOR-List of numbers

first second
8

syntax-FOR-File contents

first second
9
if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
0

syntax-FOR-Command Results

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
1

Beispiel: Sucht im Ordner C:\Windows\Temp rekursiv nach Dateien mit dem Namen //temp.dat// und gibt die Liste aus. Die Option "tokens=*" ist notwendig, damit die Ausgabe zeilenweise gelesen wird und auch Pfade mit enthaltenem Leerzeichen ausgegeben werden können.

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
2

Zählvariablen in Zeichenketten einbetten

Um die Zählvariable %%f (%f auf der Kommandozeile) in einer Zeichenfolge zu verwenden, wird einfach die Variable in dem String eingebettet

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
3

Listen erzeugen

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
4

Ist rechenaufwendiger, aber weniger fehleranfällig als ein mehrzeiliges SET mit ^-maskierten Zeilenumbrüchen, wo ein ^ am Ende der Liste ein Return mitten im späteren Befehlsaufruf auslösen würde.

Mit dem Batchbefehl

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
00 wird eine Sprungmarke
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
37 (s.o.) angesprungen.

Syntax

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
38

Beispiel

Siehe unter : (Doppelpunkt).

Der

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
39-Befehl ermöglicht eine einfache Verzweigung und wird oft zusammen mit dem GOTO-Befehl eingesetzt.
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
39 ermöglicht hierbei sowohl die Prüfung auf eine Gleichheit als auch auf das Vorhandensein von Dateien.

Beispiel 1:

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
5

Beispiel 1 prüft, ob eine Logdatei vorhanden ist und erstellt ggf. eine Neue.

Beispiel 2:

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
6

Beispiel 3:

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
7

Beachten Sie, bei der Prüfung von Umgebungsvariablen niemals

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
8

zu schreiben, wenn die Umgebungsvariable nicht gesetzt ist; Sie erhalten sonst einen Syntaxfehler. Der Parameter

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
41 unterbindet eine Differenzierung der Groß-/Kleinbuchstaben.

ACHTUNG:

Bei der Verwendung mehrerer Befehle muss zwischen Bedingung und der Klammer "(" ein Leerzeichen sein.

Falsch

if exist C:\blabla.txt goto EDITBLA
goto END

:: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben
:: Zur Unterscheidung von Sprungmarken verwende ich zwei "::"
:EDITBLA
edit c:\blabla.txt

:END
9

Richtig

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
0

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
39
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
43
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
44
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
45
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
46

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
39
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
48 EQU
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
49
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
50 An die Stelle von EQU kann jede der Optionen gesetzt werden.

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
51 Der Befehl wird nur ausgeführt, wenn die Bedingung NICHT Wahr ist. Optional.
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
45  ist gleich
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
53 ist gleich
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
54 nicht gleich
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
55 kleiner als
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
56 kleiner als oder gleich
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
57 größer als
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
58 größer als oder gleich

Hinweis zu UND- bzw. ODER-Verknüpfung[Bearbeiten]

Eine UND- bzw. ODER-Verknüpfung von zwei Bedingungen scheint nicht direkt möglich zu sein. Beim Vergleichen von Strings hilft es aber eventuell, wenn man die beiden Strings miteinander verkettet.

Beispiel

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
1

Als Workaround können mehrere aufeinanderfolgende IFs zu einer UND- bzw. ODER-Verknüpfung kombiniert werden. Bei einer ODER-Verknüpfung wird der Code ausgeführt, sobald eine der Bedingungen wahr ist. Wenn alle Bedingungen geprüft wurden und keine erfolgreich war, werden die Befehle im ELSE-Zweig ausgeführt.

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
2

Für ein UND wird in den ELSE-Zweig gesprungen ( :FALSCH ) sobald eine der Bedingungen nicht zutrifft. Nur wenn alle Bedingungen zutreffen wird der Code ausgeführt.

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
3


Die am weitesten verbreitete, kurze und gut lesbare UND-Variante ist, zwei oder mehrere IF-Bedingungen nacheinander zu schreiben.

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
4

Diese beiden Beispiele lassen sich einfach durch Kopieren der "IF..."-Zeile um beliebig viele Bedingungen erweitern. Ein Mischen von UND- und ODER-Verknüpfungen ist leider nicht ohne weiteres möglich. Außerdem dürfen Parameter niemals leer sein - deshalb sollten Variablen z. B. in Anführungszeichen eingeschlossen werden.

Lädt Tastaturtreiber. keyb gr,,c:\dos\keyboard.sys lädt den deutschen Tastaturtreiber (keyboard.sys muss sich im Verzeichis c:\dos\ befinden)

Unterbricht die Abarbeitung der Batchdatei und wartet auf einen Tastendruck.

Syntax

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
59

Interner Befehl: Ab MS-DOS bis Windows NT 5.1 (XP)

Beispiel 1:

Inhalt

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
5

Ausgabe

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
6

(Neue Seite)

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
7


Beispiel 2:

Inhalt

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
8

Ausgabe

::echo Ich bin ein Kommentar
echo Ich bin ein Befehl
9

Um eine Pause für eine bestimmte Zeitdauer vorzugeben, kann der Befehl

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
60 verwendet werden.

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
61Legt das Aussehen der Eingabezeile mit Hilfe unterschiedlicher Parameter [1] fest.

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
62 Ausgabe:
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
63

Der Prompt kann auch permanent über eine Umgebungsvariable geändert werden:
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
64Sollte der Befehl alleine und ohne Funktion eingegeben werden, so wird die Wirkung aufgehoben.

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
65 wechselt zum angegebenen Pfad und speichert den aktuellen Pfad bis zum Aufruf von
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
66.

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
66 wechselt zum gespeicherten Pfad.

Die Befehle können geschachtelt werden.


Syntax

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
68

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
66


Beispiel:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
0

Syntax:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
70

Erklärung:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
71 leitet einen Kommentar ein. Die Zeile wird ignoriert, beachten Sie jedoch, dass
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
71 von einem Leerzeichen / Tabulator gefolgt werden muss, sonst wird die Ausführung der Batchdatei unmittelbar beendet. Alternativ können zwei Doppelpunkte hintereinandergeschrieben werden
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
11 um einen Kommentar anzuführen (hier ist ein Leerzeichen nicht notwendig). Alternativ können auch Sprungmarken
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
74 oder der Echobefehl
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
21 verwendet werden.

Beispiele:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
1

Web-Links:

Mit dem rename-Befehl kann man Dateien umbenennen.

Syntax:

  • MS-DOS und Windows:
    C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
    Diese Zeile wird mit Befehlszeile ausgeführt...
    
    und diese ohne!
    
    76
  • seit Windows 98 auch
    C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
    Diese Zeile wird mit Befehlszeile ausgeführt...
    
    und diese ohne!
    
    77
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
2

Syntax:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
78

Verwendung:

Wird hauptsächlich verwendet, um einer Variablen einen Wert zuzuweisen. Siehe Batchbefehle (Variablen und Set-Befehl)

Ohne Parameter gibt set eine Liste aller Umbegebungsvariablen aus.

Der Parameter

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
79 kann dazu verwendet werden der Variable eine Benutzereingabe zuzuweisen.

Der Parameter

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
80 kann dazu verwendet werden, um mit den Variablen Rechenoperation durchzuführen.


Beispiel zur Wertezuweisung:

Inhalt Batchdatei:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
3

Ausgabe (gekürzt):

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
4
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
5

SETLOCAL / (ENDLOCAL)[Bearbeiten]

Syntax:

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
81
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
82
C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
83

Links:

Siehe auch Batchbefehle (Variablen und Set-Befehl)

Gibt die aktuelle Zeit aus und ermöglicht dem Benutzer die Änderung der Uhrzeit. Wird der Befehl mit dem Parameter /t aufgerufen, so wird nur die aktuelle Zeit ausgegeben. time kann auch als Variable benutzt werden, so kann man zum Beispiel mit %time:~0,5% die ersten 5 Zeichen übernehmen.

Beispiele:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
6

Möchte man die aktuelle Zeit für einen Dateinamen verwenden, stört der Doppelpunkt, der in Dateinamen nicht erlaubt ist. Ich kenne zwei Lösungen:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
7
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
8

Bei einigen Betriebssystemversionen erfordert das Ändern der Systemzeit administrative Rechte.

Dieser Befehl ändert die Fensterüberschrift der Eingabeaufforderung. (Falls der Befehlsinterpreter mit Administrator-Rechten gestartet wurde, also "Administrator:" im Titel steht, kann nur der Text nach dem

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
74 geändert werden.)

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>echo Ich bin ein Befehl
Ich bin ein Befehl
9

Erklärung

Dieser Befehl überschreibt, beziehungsweise hängt etwas an eine vorhandene Datei an.

Beispiel >:

Inhalt:

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)
0

Ausgabe:

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)
1

In Beispiel.bat:

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)
2


Beispiel >>:

Inhalt:

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)
3

Ausgabe:

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)
4

In Beispiel.bat:

@echo off
if 1==1 (
   :: Kommentar 1
   :: Kommentar 2
   echo OK
)
5

Erklärung

C:\>echo Diese Zeile wird mit Befehlszeile ausgeführt...
Diese Zeile wird mit Befehlszeile ausgeführt...

und diese ohne!
85 hält eine Stapeldatei für eine anzugebende Zahl von Sekunden an, gibt aber dem Anwender die Möglichkeit, die Wartezeit mit einem Tastendruck vorzeitig zu beenden. Der Befehl ist seit Windows 7 verfügbar.