Stapelverarbeitungsdateien

INHALT


I. Einleitung
1. Einfache Stapelverarbeitungsdateien
2. Einfache Batch File Befehle und Kommandos
3. Parameter in Batch Files
4. Weitere Batch File Befehle
5. Batch Files unter Windows 95


I. Einleitung
Stapelverarbeitungsdateien sind unter MS - DOS/Windows ausführbare Dateien, die verschiedene DOS Befehle hintereinander ausführen können. Solche Dateien haben die Endung .BAT und werden mit einem einfachen ASCII Editor, wie zB der mit MS - DOS mitgelieferte Basic Editor EDIT, geschrieben. Dateien mit der Endung BAT können, genau wie solche mit den Endungen EXE und COM, direkt vom DOS - Prompt (C:\>) ausgeführt werden. Solche Dateien sind "executable", ausführbar.
In einer Stapelverarbeitungsdatei steht jede neue Zeile für einen neuen Befehl. Außer den Befehlen, die auch direkt unter DOS aufgerufen werden können (DIR, CD\Verzeichnis, oder Dateien mit den Endungen COM und EXE) gibt es noch spezielle Befehle, die nur in Stapelverarbeitungsdateien, Englisch: Batch - Files, sinnvoll eingesetzt werden können (zB ECHO, CHOICE, IF [ERRORLEVEL],...).
Im Allgemeinen ähnelt die Programmierung von Batch - Files, der Basic Programmierung, obwohl die meisten Basic Befehle nicht zur Verfügung stehen.
Das wichtigste Batch File ist das Autoexec.bat, welches automatisch beim Hochfahren eines MS - DOS Computers ausgeführt wird.

1. Einfache Stapelverarbeitungsdateien
Jeder, der sich halbwegs mit MS - DOS und seinen Befehlen auskennt, ist grundsätzlich in der Lage Batch Files zu schreiben, da diese, wie gesagt, nur eine Aneinanderreihung von einzelnen DOS Befehlen sind.
Ich werde hier kurz erläutern, wie man ein Batch File erstellt.
    man wechselt in ein Verzeichnis, auf das der Pfad in der AUTOEXEC.BAT gesetzt ist (zB C:\DOS), wenn man das Batch File in jedem Verzeichnis benutzen können soll. man schreibt folgendes im DOS - Prompt: "EDIT Name.BAT", wobei [Name] für den Namen der Datei steht, mit dem die Datei dann aufgerufen werden kann. nun wird der Basic Editor geladen, der ab MS - DOS 5.0 mitgeliefert wird. wenn der Editor geladen ist, kann man schon beginnen den ersten Befehl einzugeben (siehe Bsp. 1) und mit [ENTER] wechselt man in die nächste Zeile, wo dann der zweite Befehl eingegeben wird, usw. nachdem man alle Befehle zur Zufriedenheit eingegeben hat, beendet man den Editor, natürlich nicht ohne vorher die Datei zu speichern.

Bsp.1: Ein Beispiel, wie Batch Files unter DOS sinnvoll eingesetzt werden können.
D.BAT, ein Batch, welches den Inhalt eines Verzeichnisses mit Hilfe des Befehls DIR anzeigt.
Im Batch File steht nur die folgende Zeile:
dir /p /o /a
Mit diesem Befehl werden alle Dateien des derzeitigen Verzeichnisses in alphabetischer Reihenfolge angezeigt, wobei nach jeder angezeigten Seite auf eine Bestätigung gewartet wird.
Wenn die Datei D.BAT in C:\DOS liegt, auf das der Pfad gesetzt ist, so kann man ab nun aus allen Verzeichnissen heraus diese Datei aufrufen. Man muss nur "d" schreiben um alle Dateien mit Seitenumbruch und in alphabetischer Reihenfolge anzuzeigen und nicht mehr "dir /p /o /a". So kann man sich das navigieren unter DOS erheblich vereinfachen.

2. Einfache Batch File Befehle und Kommandos
Es gibt auch Befehle, die, wenn nicht in einem Batch File eingesetzt, keine Wirkung zeigen oder absolut sinnlos sind.
Ein einfacher Befehl ist "echo". Mit diesem Befehl können Texte in einem Batch File angezeigt werden.
Normalerweise werden alle Befehle, die in einem Batch File aufgerufen werden, am Monitor ausgegeben. Der Befehl "echo off" verhindert dies, bis eine Zeile mit "echo on" im Batch File vorkommt, oder die Stapelverarbeitungsdatei durchgelaufen ist. Ein at - Zeichen (@) am Beginn einer Zeile verhindert, dass diese eine Zeile am Bildschirm angezeigt wird.
Nehmen wir Bsp.1: Wenn in einem Verzeichnis "d" eingegeben wurde sieht das Bild am Monitor so aus:

- - - Monitor - - -
C:\> d - - - Aufruf von D.BAT aus MS - DOS

C:\> dir /p /o /a - - - Erste Zeile von D.BAT wird angezeigt

[Auflistung der Dateien im Verzeichnis C:\]

C:\> - - - Batch File beendet, DOS bereit für weitere Eingaben
- - - Monitor - - -

Falls man die Datei D.BAT ein wenig modifiziert, so kann man verhindern, dass der Befehl "dir /p /o /a" angezeigt wird. Die erste Zeile in D.BAT müsste so aussehen:

@dir /p /o /a

bzw. man benützt "echo off", dann braucht man schon zwei Zeilen:

@echo off
dir /p /o /a

So erhält man ein übersichtlicheres Bild, vor allem bei längeren Batch Files:

- - - Monitor - - -
C:\> d - - - Aufruf von D.BAT aus MS - DOS
[Auflistung der Dateien im Verzeichnis C:\]
C:\> - - - Batch File beendet, DOS bereit für weitere Eingaben
- - - Monitor - - -

ECHO (ON/OFF)
Wenn ECHO ausgeschalten ist ("echo off") können auch einfache Meldungen ausgegeben werden.
Syntax: ECHO [Meldung]
Mit "echo." kann man eine leere Zeile anzeigen.
Man kann in D.BAT noch zwei Meldungen einbauen, vor und nach dem Aufruf vom DIR Befehl, um anzuzeigen wie weit das Batch File abgelaufen ist.

@echo off
echo Alle Dateien im Verzeichnis werden jetzt angezeigt:
echo. - - - Hier wird beim Ausführen eine leere Zeile eingefügt
dir /p /o /a
echo.
echo D.BAT beendet.

Folgendes Bild würde sich dann ergeben:

- - - Monitor - - -
C:\> d - - - Aufruf von D.BAT aus MS - DOS

Alle Dateien im Verzeichnis werden jetzt angezeigt: - - - Meldung wird angezeigt
- - - eine leere Zeile wird eingefügt
[Auflistung der Dateien im Verzeichnis C:\]
- - - eine leere Zeile wird eingefügt
D.BAT beendet. - - - zweite Meldung wird angezeigt

C:\> - - - Batch File beendet, DOS bereit für weitere Eingaben
- - - Monitor - - -

Sonderzeichen wie spitze Klammern können in Batch Files nicht angezeigt werden, weil diese eine andere Funktion erfüllen. (siehe unten)

CHOICE, GOTO
Ein weiterer spezieller Befehl für Batch Files ist "choice". Eigentlich ist es ein selbstständiges Programm, das ab DOS 6.0 mitgeliefert wird. Dieser Befehl kann Tastatureingaben abfragen, um, je nach Eingabe, eine Verzweigung zu erzeugen oder einen Befehl auszuführen. Eine ausführliche Beschreibung des Befehls findet man in der DOS - Hilfe.
Der choice Befehl wird hier an einem Beispiel erläutert:

- - - BSP.BAT - - -
@echo off
echo [A] drücken, um Programm auszuführen
echo [B] drücken, um BSP.BAT zu beenden und zu DOS zurückzukehren
choice /c:AB /n - - - Hier wird auf eine Tastatureingabe von entweder "A" oder "B" gewartet
if errorlevel 2 goto ende - - - siehe Erklärung unten
if errorlevel 1 goto programm

:programm - - - ein Sprungziel wird mit einem Doppelpunkt markiert
cd\programm - - - ins Verzeichnis mit dem Programm wechseln
programm - - - das Programm (EXE, COM oder BAT) ausführen
goto ende

:ende - - - das Sprungziel am Ende der Datei beendet das Batch File
- - - BSP.BAT - - -

Erklärung zu if errorlevel: Falls choice den Fehlercode (Errorlevel) 2 zurückgibt, bedeutet das, dass "B" gedrückt wurde, da B an zweiter Stelle im choice Befehl angeführt wurde (/c:AB) und das zum Sprungziel "ende" gesprungen werden soll (goto ende). Falls aber A gedrückt wurde, springt das Batch File zum Sprungziel "programm", um von dort aus weitere Befehle auszuführen.
Normale Programme geben nach dem Beenden keinen Errorlevel zurück. Falls aber während dem Ausführen ein Fehler aufgetreten sein sollte, so geben die meisten Programme den Errorlevel 1 zurück. Somit kann man den weiteren Ablauf des Batch Files von der erfolgreichen oder misslungenen Ausführung eines Programms abhängig machen.
IF (NOT) EXIST
Mit dem "if exist" (bzw. "if not exist") Befehl lässt sich überprüfen, ob ein Verzeichnis, oder eine Datei existiert.

@echo off
if exist c:\dos\choice.com echo Choice gefunden - Batch File kann ausgeführt werden!
if not exist c:\dos\choice.com echo Choice NICHT gefunden - Batch File wird beendet!
if not exist c:\dos\choice.com goto ende

Diese Zeilen überprüfen, ob das DOS Zusatzprogramm choice installiert wurde und falls dies nicht der Fall sein sollte, wird das Batch File beendet (goto ende).

Falls man überprüfen will, ob ein Verzeichnis existiert, muss man einen kleinen Trick anwenden, wie im folgenden Beispiel beschrieben.

@echo off
if not exist c:\bat\nul md c:\bat

Hier wird, falls das Verzeichnis C:\BAT nicht existiert, selbiges mit dem MS - DOS Befehl md (Make Directory) erstellt. Bei der Abfrage mit if ist darauf zu achten, das man an den Verzeichnisnamen "\nul" anhängt, da "if exist" nur die Existenz von Dateien feststellen kann.

Mit dem if Befehl lassen sich auch zwei Parameter miteinander vergleichen. Zu Beachten ist, das zwei Gleichheitszeichen gesetzt werden müssen.

@if (not) Parameter1==Parameter2 goto ...

3. Parameter in Batch Files
Mit dem Aufruf eines Batch Files können vom DOS Prompt auch Parameter übergeben werden. Wenn man den Inhalt eines Verzeichnisses anzeigen möchte, ohne sich jedoch in diesem Verzeichnis zu befinden, so muss man einen Parameter angeben. Parameter werden beim Aufruf an den Programmnamen angefügt und mit aufsteigender Reihenfolge als %1, %2, %3 usw. bezeichnet. Greifen wir auf Bsp.1 zurück:

Bsp.1b: (D.BAT)
dir %1 %2 /p /o /a

- - - Monitor - - -
C:\> d c:\dos - - - "c:\dos" ist Parameter 1 und wird als %1 angesprochen
C:\> dir c:\dos /p /o /a - - - %2 ist nicht angegeben und wird weggelassen

[Auflistung aller Dateien im Verzeichnis C:\DOS]

C:\> - - - D.BAT beendet
- - - Monitor - - -

So kann man aus einem beliebigen Verzeichnis den Inhalt eines anderen Verzeichnisses abfragen, ohne dorthin wechseln zu müssen.

Bsp.2: (XC.BAT)
@echo off
if %1!==! goto ende - - - falls kein Parameter 1 angegeben wurde, wird abgebrochen
if %2!==! goto ende - - - falls kein Parameter 2 angegeben wurde, wird abgebrochen
xcopy %1 %2 /v /s /e
:ende

Mit diesem Batch (XC.BAT) wird der DOS Befehl "xcopy" benutzt, um Dateien oder Verzeichnisse zu kopieren. Es werden an den Befehl noch die Parameter /v /s und /e angehängt, die bewirken, dass alle Dateien überprüft werden und auch alle Unterverzeichnisse kopiert werden. Ein weiterer Vorteil dieses Batch Files ist, dass "xcopy" nun einfach durch "xc" abgekürzt wird.
Die Abfrage "if %1!==! goto ende" bewirkt, dass falls kein Parameter (%1) angegeben wurde (%1! = !), zum Sprungziel "ende" gesprungen wird.

- - - Monitor - - -
C:\DOS> xc *.* a:\ - - - alle Dateien (mit Unterverzeichnissen) auf A: kopieren

[Auflistung der kopierten Dateien] - - - diese Auflistung kann sich über mehrere Seiten erstrecken

C:\DOS> - - - Batch File beendet
- - - Monitor - - -

Das ">" Zeichen
Um zu verhindern, dass alle Dateien, die kopiert wurden aufgelistet werden, muss man ">nul" an den "xcopy" Befehl anhängen. Dadurch wird die Anzeige ins Datennirvana umgeleitet und nicht am Monitor ausgegeben.
Zusätzlich kann man noch eine Fehlerprüfung einbauen, die eine Meldung ausgibt, falls ein Fehler beim Kopieren aufgetreten sein sollte. Dies ist von Vorteil, da man ja die Fehlermeldungen jetzt auch nicht mehr sehen kann.

Bsp.2a: (XC.BAT)
@echo off
if %1!==! goto ende
if %2!==! goto ende
echo Kopiere Dateien und Unterverzeichnisse... - - - Meldung, die Ausgegeben wird
xcopy %1 %2 /v /s /e>nul
if errorlevel 1 goto error - - - Falls xcopy den Errorlevel 1 zurückgibt, wird zur Fehlermeldung gesprungen
goto ende - - - Fehlermeldung übergehen und zum Ende des Batch Files springen.
:error
echo FEHLER BEIM KOPIEREN AUFGETRETEN!
:ende

Das ">" Zeichen kann auch benutzt werden, um Daten an den Drucker zu senden (LPT1).
Um die Autoexec.bat mit Hilfe eines Batch Files und dem type Befehl auszudrucken, müsste das Batch File so aussehen: (Vorausgesetzt, der Drucker ist an LPT1 angeschlossen)
@type c:\autoexec.bat>lpt1
Um eine einzige Zeile ausdrucken, kann man den bekannten echo Befehl benutzten:
@echo Das ist ein Probeausdruck.>lpt1
Weiters kann man natürlich auch an COM1 und COM2 Befehle senden.
Um zB das Modem an COM2 zurückzusetzten (Modem Befehl: ATZ), muss man folgendes Bat erstellen:
@echo ATZ>com2
Natürlich können alle diese Befehle auch direkt aus dem DOS Prompt (C:\>) eingegeben werden, aber falls man sie öfters braucht, ist es sinnvoll diese in ein Batch File zu schreiben, um sich mühsame Tipparbeit zu ersparen.
Um hier den Nutzen von Parametern aufzuzeigen folgendes Beispiel:
- - - SEND.BAT - - -
@echo off
echo %1>%2
- - - SEND.BAT - - -
Mit "send" kann nun entweder eine Zeile ausgedruckt werden, oder ein Befehl ans Modem geschickt werden. Wenn die Eingabe so aussieht: "send Das_ist_ein_Probeausdruck lpt1" wird "Das_ist_ein_Probeausdruck" auf LPT1 (Druckeranschluss) ausgegeben. Zu Beachten ist, dass keine Leerzeichen in der zu Druckenden Zeile vorkommen, da das schon %2, also der zweite Parameter wäre.
Wenn man aber "send ATZ com2" eingibt, so wird das Modem an COM2 (falls vorhanden) zurückgesetzt.

Eine weitere Variante, um sich Tipparbeit zu ersparen:
- - - SEND.BAT - - -
@echo off
if %2==m set sendto=com2
if %2==d set sendto=lpt1
echo %1>%sendto%
set sendto= - - - Die Umgebungsvariable "sendto" wird gelöscht
- - - SEND.BAT - - -
Falls man für den zweiten Parameter (%2) "m" oder "d" angibt, wird die Umgebungsvariable "sendto" automatisch auf "com2" (für "m" = Modem) bzw. "lpt1" ("d" steht für Drucker) gesetzt. Umgebungsvariablen werden von zwei Prozentzeichen eingeschlossen (%sendto%) und mit dem set Befehl gesetzt und gelöscht.

4. Weitere Batch File Befehle
FOR
Der for Befehl ermöglicht es, für eine bestimmte Gruppe von Dateien, einen bestimmten Befehl auszuführen.
Syntax: for %%f in (*.*) do Befehl
Hier wird für alle Dateien (*.*) ein Befehl ausgeführt, wobei %%f der jeweilige Name der Datei ist, der an den Befehl übergeben werden kann. (Wichtig sind die zwei Prozentzeichen!)
Um in einem Verzeichnis alle Dateien mit der Endung TXT auszudrucken, muss man folgende Zeile in ein Batch File schreiben:
for %%f in (*.txt) do type %%f>lpt1
Es werden, mit Hilfe des type Befehls, der Reihe nach alle TXT Dateien an LPT1 gesendet und ausgedruckt. Natürlich kann man jeden beliebigen Befehl für type einsetzten.






CALL
Aus einem Batch File heraus können natürlich auch andere Batch Files aufgerufen werden (und auch alle anderen ausführbaren Dateien, *.EXE und *.COM), aber ein Batch File, welches ein anderes aufruft, wird dadurch automatisch beendet. Um das zu verhindern muss dem Aufruf eines neuen Batch Files der call Befehl vorangesetzt werden. Dieser Befehl bewirkt, dass das ursprüngliche Batch File nicht beendet wird, sondern nachdem das neu aufgerufene Batch File durchgelaufen ist, weiterläuft.

REM
Wenn man einer Zeile eines Batch Files REM (Remark = Bemerkung) voranstellt, so wird diese Zeile beim Programmablauf ignoriert. Das ist besonders praktisch, wenn man eine Befehlszeile nur kurz entfernen will, ohne sie gleich zu löschen oder einfach nur ein nicht sichtbares Kommentar anbringen will. Zeilen mit vorangestelltem REM Kommando werden voll abgearbeitet (d.h. nach Befehlen durchsucht), obwohl das nichts bewirkt. Dadurch werden Batch Files mit einigen REM Kommandos besonders auf langsamen Rechnern deutlich gebremst. Um das zu verhindern, kann man seine Kommentare auch als Sprungziel angeben, indem man statt REM einfach einen Doppelpunkt am Beginn einer Zeile angibt.
Das beschleunigt den Ablauf auf langsamen Rechnern um einiges.

PAUSE
Der Befehl pause wartet auf einen Tastendruck und zeigt eine Meldung an, bevor das Batch File weiterläuft. Um die Meldung ("Eine beliebige Taste drücken, um fortzusetzen" bzw. "Press any key to continue") nicht anzuzeigen, muss man "pause>nul" ins Batch File schreiben.

5. Batch Files unter Windows 95
Wer glaubt, dass mit MS - DOS auch die Batch Files gestorben sind, der irrt. Unter Windows 95 ist es endlich möglich auch Programme, die eigentlich nur unter Windows laufen, aus einem Batch File bzw. dem MS - DOS Prompt heraus auszuführen. So ist es möglich, mehrere Windows Programme gleichzeitig zu starten, da aufgrund der (beschränkten) Multitaskingfähigkeiten von Windows 95 das Batch File im Hintergrund weiterläuft. Während das erste Programm gestartet wird, startet das Batch File gleich das nächste, usw.
Zu Beachten ist jedoch, dass man zuerst die Windows Programme startet, bevor man ein MS DOS Programm startet, da die MS DOS Programme das Batch File blockieren und dieses erst weiterläuft, wenn das DOS Programm beendet wurde.

2626 Worte in "deutsch"  als "hilfreich"  bewertet