Batch-Tutorial für Einsteiger
von info-tec



INHALT

1. Grundlagen
2. Aufbau
3. Variablen
4. Kontrollstrukturen
5. Kommandozeilenparameter
6. Call
7. Zusammenfassung


1 Grundlagen

Der Kommandointerpreter COMMAND.COM ist auch ein kleiner Interpreter einer Programmiersprache. Er kann einfachste kleine Programme abarbeiten, die in der Regel nur eine Aufzählung von DOS-Kommandos oder Programmaufrufen sind. Diese Programme werden BATCH-Programme genannt, von engl. batch (Stapel). Im einfachsten Fall besteht eine BATCH Datei also aus einer Aufzählung von DOS--Befehlen, die dann hintereinander abgearbeitet werden.

Dateien, die nach den Regeln dieser Sprache erstellt wurden haben .BAT als vorgeschriebene Endung und sind unter DOS gleich ausführbar wie Programme.

Wenn Sie eine Batchdatei zur Fehlersuche zeilenweise abarbeiten wollen, so rufen Sie einen zweiten Kommandointerpreter auf, mit dem Parameter /Y und der abzuarbeitenden Batch-Datei:

  COMMAND /Y test.bat

[... zurück zum Inhalt]

 

2 Der Aufbau

2.1 Abarbeiten eines Befehls-Stapels

BATCH-Dateien sind reine Textdateien (ASCII) und können mit jedem beliebigen Editor (z.B. EDIT) erstellt werden. Im einfachsten Fall enthalten sie, wie schon gesagt, nur mindestens einen DOS-Befehl:

  CLS
  DIR /p

Damit ist es also leicht möglich, komplizierte Befehle mit vielen Parametern einfach zugänglich zu machen, ohne sich die Parameter einzeln merken zu müssen. Um z.B. die Einstellung eines seriellen Druckers mit MODE zu vereinfachen könnten Sie in eine Datei DRUCKER.BAT schreiben:

  MODE COM1 baud=9600 parity=N data=8 stop=1
  MODE LPT1=COM1

Somit würde es genügen den Befehl DRUCKER einzugeben, statt jedesmal die beiden obigen Zeilen.

 

2.2 Textausgabe mit ECHO

Wenn eine Batch-Datei abgearbeitet wird, so werden auch die darin enthaltenen Befehle auf dem Bildschirm angezeigt. Diese Eigenschaft ist oft störend und kann daher aus- und auch wieder eingeschaltet werden. Das geschieht mit dem Befehl ECHO. Dabei schreiben Sie:

  ECHO OFF

um das Echo (die Darstellung des Befehls auf dem Bildschirm) auszuschalten und

  ECHO ON

um es wieder zu aktivieren. Üblicherweise wird das Echo in Batch-Dateien gleich zu Anfang abgeschaltet. Damit aber der Befehl ECHO OFF nicht selbst trotzdem dargestellt wird, wird ihm ein Klammeraffe (@) vorgestellt, also:

  @ECHO OFF

Der Befehl ECHO wird aber auch benutzt, um beliebige Textausgaben auf dem Bildschirm erscheinen zu lassen. Dabei wird alles, was hinter einem ECHO Befehl steht als Textzeile auf dem Schirm abgebildet. (Außer ON und OFF) Dazu ist es nicht nur möglich, sondern auch geradezu notwendig, das ECHO vorher abzuschalten weil sonst der Befehl ECHO TEXT und in der nächsten Zeile erst der Text selbst auf dem Schirm erscheinen würde:

  @ECHO OFF
  ECHO Das ist eine erste Batchdatei.
   ...

Ohne jeden Parameter gibt ECHO den jeweiligen Zustand (ON oder OFF) aus, nicht etwa eine Leerzeile. Um eine Leerzeile auszugeben müssen Sie den ECHO-Befehl mit direkt folgendem Punkt angeben also

  ECHO.

2.3 Anhalten des Ablaufs mit PAUSE

Oft ist es nötig, die Abarbeitung des Programms an einer bestimmten Stelle anzuhalten um z.B. auf einen Diskettenwechsel zu warten. Das geschieht mit dem Befehl PAUSE. Dabei wird eine Meldung ausgegeben, die besagt, daß eine Taste gedrückt werden soll, wenn es weiter gehen soll. Eine Batch Datei, die den Inhalt dreier Disketten in ein Verzeichnis kopiert könnte also z.B. so aussehen:

  @ECHO OFF
  ECHO Bitte die erste Diskette einlegen...
  PAUSE
  COPY a:\*.* c:\VERZ1

  ECHO Bitte die zweite Diskette einlegen...
  PAUSE
  COPY a:\*.* c:\VERZ1

  ECHO Bitte die dritte Diskette einlegen...
  PAUSE
  COPY a:\*.* c:\VERZ1

  ECHO Fertig...

2.4 Kommentare

Innerhalb einer Batch-Datei werden Kommentare mit dem Befehl REM eingeleitet. Zeilen, die mit diesem Befehl beginnen werden vom Kommandointerpreter einfach ignoriert. Damit ist es nicht nur möglich, einfache Kommentare zum besseren Verständnis einzufügen, sondern auch einzelne Befehle, die nicht ausgeführt werden sollen auszuklammern.

[... zurück zum Inhalt]



3 Variablen

MS-DOS kennt die Möglichkeit, Umgebungsvariablen zu definieren, eins der bekanntesten Beispiele ist die PATH Variable, in der der Suchpfad angegeben wird, der nach ausführbaren Dateien durchsucht werden soll. Es gibt mehrere solcher Variablen etwa TEMP, COMSPEC. Auf diese Variablen kann in einer Batch-Datei zugegriffen werden. Dazu muß der Variablennamen innerhalb von Prozentzeichen (%) aufgeführt werden:

  @ECHO OFF
  ECHO Die Pfad Variable PATH enthält die Einträge:
  ECHO %PATH%
  ECHO Als Kommandointerpreter wird %COMSPEC% benutzt.

Solche Variablen können beliebig gesetzt werden, mit dem Befehl

  SET VARIABLE=WERT

werden sie erzeugt, mit einem einfachen SET VARIABLE= werden sie wieder gelöscht. Sie dürfen auch Leerzeichen enthalten:

  @ECHO OFF
  SET VAR1=Hallo
  SET VAR2=Hans Hugo Häberlein
  ECHO %VAR1% %VAR2%
  SET VAR1=
  SET VAR2=

 

Vorsicht: Die bereits bestehenden Umgebungsvariablen wie PATH oder TEMP sollten natürlich nicht gelöscht werden, wenn nicht erwünscht ist, daß sie nach Ablauf der Batch-Datei weiter gelöscht bleiben.

[... zurück zum Inhalt]



4 Kontrollstrukturen

Kontrollstrukturen sind Möglchkeiten, den linearen Ablauf einer Batch-Datei zu verändern. Dazu stehen hier leider nur wenige zur Verfügung, es reicht aber für die wichtigsten Aufgaben.

4.1 GOTO

Mit dem Befehl GOTO können Sie den Kommandointerpreter dazu bringen, nicht in der nächsten Zeile mit der Bearbeitung der Datei fortzufahren, sondern sie befehlen ihm zu einer bestimmten Stelle in der Datei zu springen. Diese Stelle wird als Marke bezeichnet und mit einem Doppelpunkt und einem Markennamen gebildet. So lassen sich z.B. Endlosschleifen programmieren:

  @ECHO OFF
  :Anfang
  ECHO in der Schleife
  GOTO Anfang

4.2 IF

Mit der IF Anweisung können Sie drei verschiedene Bedingungen überprüfen, die Existenz einer Datei, die Gleichheit zweier Zeichenketten und den Rückgabewert des zuletzt gelaufenen DOS-Programms (ERRORLEVEL). Durch das Zufügen eines NOT können auch die jeweils gegenteiligen Bedingungen Überprüft werden. (Nichtexistenx, Ungleichheit oder die Tatsache daß ein Programm NICHT mit einem bestimmten Rückgabewert beendet wurde) In der Regel werden IF-Anweisungen mit dem GOTO Befehl verbunden, sie können jedoch auch einen einzigen Befehl veranlassen.

4.2.1 Existenz von Dateien überprüfen

Syntax:

IF [NOT] EXIST Dateiname Befehl

Ein Beispiel, das eine Datei nur dann kopiert, wenn sie existiert und sonst eine Fehlermeldung ausgibt wäre etwa:

  @ECHO OFF
  IF NOT EXIST test.dat GOTO fehler
  COPY test.dat c:\verz1
  GOTO ende
  :fehler
  ECHO Datei TEST.DAT nicht gefunden ! 
  :ende 

Tip: Um zu überprüfen, ob ein Verzeichnis existiert, können Sie einfach die Existenz der Datei NULL in diesem Verzeichnis abfragen. Existiert sie, so existiert auch das Verzeichnis.

4.2.2 Zeichenkettenvergleich

Syntax:

IF [NOT] "Zeichenkette1"=="Zeichenkette2" Befehl

Hier können zwei Zeichenketten miteinander verglichen werden, beide sollten immer in doppelten Anführungszeichen stehen. Als Zeichenketten können sowohl eingetippte Wörter, Umgebungsvariablen (siehe unten) als auch Kommandozeilenparameter (siehe auch weiter unten) benutzt werden. Ein kurzes Beispiel, das überprüft ob ein Kommandozeilenparameter eingegeben wurde:

  @ECHO OFF
  IF "%1"=="" GOTO fehler
  ...
  GOTO ende
  :fehler
  ECHO Keine Parameter eingegeben...
  :ende

4.2.3 ERRORLEVEL überprüfen

Syntax:

IF [NOT] ERRORLEVEL Wert Befehl

Jedes DOS Programm liefert beim Beenden einen Abschluß-Fehlercode. Falls das Programm fehlerfrei abgelaufen ist, so gibt es meist den Wert 0 zurück, falls es Fehler gab eine Fehlernummer. (Man kann sich leider bei DOS nicht darauf verlassen) Diese Fehlernummer kann auch mittels IF-Anweisung abgefragt werden. Wichtig ist, daß hier immer mit der größten Nummer angefangen wird, weil die IF-Anweisung komischerweise nicht auf Gleichheit, sondern auf größer oder gleich prüft Ein Beispiel für diese Anwendung gibt es gleich im nächsten Abschnitt, CHOICE ist nämlich ein Programm, das sein Ergebnis über den ERRORCODE zurückgibt...

4.3 CHOICE

Um auch so etwas wie ein Menü realisieren zu können, steht der Befehl CHOICE zur Verfügung. CHOICE erwartet als Parameter einen Satz, der auf dem Bildschirm ausgegeben wird und eine Aufzählung von Buchstaben, die als Antwort gültig sind. Also etwa:

  @ECHO OFF
  CHOICE /C:ABC Drücken sie die A, B oder C Taste...
  IF ERRORLEVEL 3 ECHO C eingegeben.
  IF ERRORLEVEL 2 ECHO B eingegeben.
  IF ERRORLEVEL 1 ECHO A eingegeben.
   ...

In diesem Fall wird keine andere Taste als A, B oder C anerkannt. Sollten Sie die Aufzählung der Tasten weglassen, so wird standardmäßig die Auswahl J und N angenommen (bei englischem DOS natürlich dann Y und N).

Es ist auch möglich, ein Timeout einzustellen und zu definieren, welche Taste nach einer bestimmten Zeit als gedrückt gelten soll. Dazu ist der Parameter /T c,nn anzugeben, wobei hier c für die angenommene Taste steht und nn für die Anzahl der Sekunden, die auf eine Eingabe gewartet werden soll.

Durch Angabe des Parameters /S wird zwischen Groß- und Kleinschreibung unterschieden.

Der Parameter /N+ unterdrückt die Abfrage, stellt aber den Text dar.

4.4 FOR

Die FOR-Anweisung arbeitet eine Liste ab, es realisiert eine Schleife, die so oft durchlaufen wird, wie die Liste Elemente vorweist. Als Liste können sowohl Dateinamen mit Metazeichen (z.B. *.*) als auch Zeichenketten verwendet werden. Um sich etwa alle Textdateien im aktuellen Verzeichnis anzuschauen könnten Sie schreiben

  @ECHO OFF
  FOR %%a IN (*.txt) DO type %%a

Als Variablen müssen Sie immer einbuchstabige Namen wählen, die mit zwei % Zeichen versehen sind. (Außerhalb von Batch-Dateien genügt ein %)

[... zurück zum Inhalt]

 


5 Kommandozeilenparameter

5.1 Normale Parameter

Batch-Dateien können, wie alle anderen Programme auch Kommandozeilenparameter bearbeiten. Diese Parameter werden innerhalb der Datei mit den Namen %1 bis %9 bezeichnet. Um also etwa eine Batch-Datei zu erstellen, die den Inhalt einer Diskette in ein bestimmtes Verzeichnis kopiert, könnten Sie schreiben:

  @ECHO OFF
  ECHO Bitte die Diskette einlegen...
  PAUSE
  COPY A:\*.* %1
  ECHO Fertig.

Würden Sie diese Datei ACOPY.BAT nennen und sie folgendermaßen aufrufen:

  ACOPY C:\VERZ1

so stünde in der Zeile mit dem Kopierbefehl jetzt statt dem %1 der angegebene Parameter C:\VERZ1 und der Befehl würde also lauten:

  ...
  COPY A:\*.* C:\VERZ1
  ...

Es sind also genau neun Parameter mit dieser Methode ansprechbar, der Parameter %0 hat eine Sonderbedeutung, er enthält den Namen der Batch-Datei.

5.2 Mehr als 9 Parameter

Mit einem Trick und dem Befehl SHIFT können auch mehr als neun Parameter benutzt werden, die können dann aber nicht einzeln mit Nummern angesprochen werden. SHIFT verschiebt einfach alle Parameter um eins nach links. Das heisst, der erste Parameter fällt weg, der zweite wird zum ersten, der dritte zum zweiten usw. Damit sind also auch die Abarbeitung aller Parameter möglich, auch wenn Sie garnicht wissen, wie viele eigentlich benutzt wurden. Hier ein Beispiel:

Das folgende Programm schreibt alle angegebenen Parameter auf den Bildschirm, keinen zuviel und aber auch keinen zuwenig...

  @ECHO OFF
  :anfang
  IF "%1"=="" GOTO ende
  ECHO %1
  SHIFT
  GOTO anfang
  :ende

So ist es also auch möglich, Programme zu schreiben, die für alle Parameter das gleiche tun, ohne zu wissen, wieviele es denn sind. Es wird solange immer nur der erste Parameter ausgewertet, solange es einen ersten Parameter gibt. Nach jedem Durchgang wird mit SHIFT eine Verschiebung vorgenommen...


6 CALL

Mit CALL können Sie aus einer Batch-Datei heraus andere Batch-Dateien aufrufen. Machen Sie es einfach ohne Call, so funktioniert zwar der Aufruf der anderen Batch-Dtei, nach deren Abarbeitung kehrt die Kontrolle nicht mehr zur aufrufenden Batch-Datei zurück.

[... zurück zum Inhalt]


7 Zusammenfassung der Syntax für alle BATCH-Befehle

Die folgenden Kurzbeschreibungen sind der Online Hilfe von MS-DOS entnommen und können jederzeit durch die Eingabe BEFEHL /? abgerufen werden.

7.1 ECHO

Zeigt Meldungen an oder schaltet die Befehlsanzeige ein (ON) oder aus (OFF).

 ECHO [ON | OFF]
 ECHO [Meldung]

ECHO ohne Parameter zeigt die aktuelle Einstellung der Befehlsanzeige an.

7.2 PAUSE

Hält die Ausführung einer Stapelverarbeitungsdatei an und zeigt folgende Meldung an:

 Eine beliebige Taste drücken, um fortzusetzen

7.3 IF

Verarbeitet Ausdrücke mit Bedingungen in einem Stapelverarbeitungsprogramm.

IF [NOT] ERRORLEVEL Nummer Befehl
IF [NOT] Zeichenfolge1==Zeichenfolge2 Befehl
IF [NOT] EXIST Dateiname Befehl
NOT Der Befehl soll nur dann ausgeführt werden, wenn die Bedingung nicht erfüllt ist.
ERRORLEVEL Nummer Diese Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm einen Code größer oder gleich Nummer zurückliefert.
Befehl Der auszuführende Befehl, falls die Bedingung erfüllt ist.
Zeichenfolge1==Zeichenfolge2 Diese Bedingung ist erfüllt, falls die Zeichenfolgen übereinstimmen.
EXIST Dateiname Diese Bedingung ist erfüllt, falls die angegebene Datei existiert.

7.4 GOTO

Setzt die Ausführung eines Stapelverarbeitungsprogramms an einer Marke fort.

 GOTO Marke

Marke Eine Zeichenfolge als Marke in einem Stapelverarbeitungsprogramm.

Marken stehen allein am Zeilenanfang mit einem vorangestellten Doppelpunkt.

7.5 FOR

Führt einen Befehl für jede einzelne Datei eines Satzes von Dateien aus.

FOR %%Variable IN (Satz) DO Befehl [Parameter]
%%Variable Ein ersetzbarer Parameter (bestehend aus einem einzelnen Zeichen).
(Satz) Ein Satz von mindestens einer Datei. Platzhalter sind zulässig.
Befehl Befehl, der für jede Datei ausgeführt werden soll.
Parameter Parameter und Optionen für den angegebenen Befehl.

7.6 CHOICE

Wartet auf die Auswahl des Benutzers der angezeigten Optionen.

CHOICE [/C[:]Tasten] [/N] [/S] [/T[:]c,nn] [Text]
/C[:]Tasten Angabe der zulässigen Tasten. Standard ist JN.
/N Keine Anzeige eines ?-Zeichens am Ende der Meldung.
/S Groß-/Kleinschreibung für Tasten wird beachtet.
/T[:]c,nn Nach nn Sekunden wird Standardauswahl c ausgeführt.
Text Meldung, die angezeigt wird.

ERRORLEVEL ist auf die Position der gedrückten Taste aus der Tastenauswahl gesetzt.

7.7 SHIFT

Verändert die Position ersetzbarer Parameter in einem Stapelverarbeitungsprogramm.

SHIFT

7.8 CALL

Ruft ein Stapelverarbeitungsprogramm von einem anderen aus auf.

CALL [Laufwerk:][Pfad]Dateiname [Parameter]

7.9 SET

Setzt oder entfernt MS-DOS-Umgebungsvariablen oder zeigt sie an.

SET [Variable=[Zeichenfolge]]
Variable Der Name der Umgebungsvariable.
Zeichenfolge Eine Zeichenfolge, die der Variablen zugewiesen werden soll.

Der Befehl SET ohne Parameter zeigt die derzeitigen Umgebungsvariablen an.



Diese Seite wurde zuletzt bearbeitet am 16.05.01, 06:10h
Copyright © by INFOTEC webmaster@info-tec.de



HTML-Redesign © 2008 Thomas Antoni   ---   Visit my Homepage   www.antonis.de
---=== Hottest MS-DOS Stuff on Earth !! ===---