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