Batch-Programme automatisieren Routineaufgaben

Batch-Programm sind die Shell-Scripts der Microsoft-Welt

Bei der Arbeit mit einem Betriebssystem gibt es für Techniker, Administratoren usw. immer wieder zeitaufwändige Routinearbeiten, die sich automatisieren lassen. Zahlreiche Befehle werden an der Kommandozeile in einer logischen Reihenfolge eingegeben und vom System verarbeitet. Für diesen Zweck gibt es in jedem Betriebssystem für PC's eine Möglichkeit, die wiederkehrende Abläufe mit einer Script-Sprache zu automatisieren.

In MS-DOS, Windows 95/98 oder Windows NT, Windows XP oder Windows Vista werden diese Befehls-Scripts als Batch-Files bezeichnet, in der deutschen Übersetzung «Stapelverarbeitungsdateien». Diese Bezeichnung ist durchaus treffend, da es sich bei einer Batch-Datei um einen Stapel von Befehlen handelt, der nach und nach abgearbeitet wird.

Die Grundlagen für die Erstellung einer Batch-Datei sind auf jeden PC verfügbar. Sie benötigen einen Text-Editor, in dem Sie eine Datei als reinen ASCII-Text speichern können. Verwenden Sie dazu am besten den Editor von MS-DOS (EDIT.COM) oder Windows 95/98 bzw. in Windows NT/XP oder Windows Vista den Editor NOTEPAD.EXE. Beachten Sie aber, dass Windows den ANSI-Zeichensatz verwendet - dies wirkt sich bei Sonderzeichen und Umlauten in Bildschirm-Meldungen aus.

Batch-Programm im Windows-Editor NOTEPAD.EXE

Alle Batch-Dateien werden von einem Kommando-Interpreter verarbeitet bei MS-DOS und Windows 95/98 ist dies COMMAND.COM, bei Windows NT/XP und Vista CMD.EXE. Darum brauchen Sie sich aber nicht zu kümmern, wenn sie eine Stapelverarbeitungsdatei starten, wird vom Betriebssystem automatisch der passende Interpreter aktiviert.

Erste Batch-Schritte
Um eine Batch-Datei zu erstellen startet man also einen Editor beginnt die Befehle in einer logischen Reihenfolge zu schreiben, doch was schreibt man da? Die Befehle des Betriebssystems - in der gewünschten bzw. logischen Reihenfolge. Das heisst, Sie müssen sich eine Aufgabe suchen, in der die Verwendung von Batch-Dateien sinnvoll ist, beispielsweise für die Automatisierung der Datensicherung.

Eine Referenz aller verfügbaren Befehle liefert Ihnen das Betriebssystem durch Eingabe von HELP. Mit der Syntax /? wird ein einzelner Befehl erläutert. Die Eingabe von MD /? führt unter Windows Vista zu folgender Ausgabe:

C:\>md /?
Erstellt ein Verzeichnis.

MKDIR [Laufwerk:]Pfad
MD    [Laufwerk:]Pfad

Wenn die Befehlserweiterungen aktiviert sind, wird MKDIR folgendermaßen
verändert:

MKDIR erstellt, wenn nötig, jedes Zwischenverzeichnis. Wenn zum Beispiel das Verzeichnis \a nicht existiert, dann entspricht

    mkdir \a\b\c\d

der folgenden Befehlsfolge:

    mkdir \a
    chdir \a
    mkdir b
    chdir b
    mkdir c
    chdir c
    mkdir d

Zu beachten in diesem Hilfebeispiel ist der Hinweis auf dei Befehlserweiterungen. Diese wurden erstmals mit Windows NT eingeführt und in Windows XP bzw. Vista stark erweiteret. Die Befehlserweiterungen erweitern die verfügbaren Optionen stark, die damit erstellten Scripts sind dann jedoch nicht mehr unter tieferen Windows-Versionen (Windows 95/98 teilweise auch Windows NT) lauffähig.

Typische Aufgabenstellung für ein Batch-Programm
Die folgende Aufgabenstellung ist ein Klassiker für ein Batch-Programm: Der Zweck besteht darin, eine Datensicherung als Routine-Aufgabe zu automatisieren.
  • Es eine Datensicherung von Office-Dokumenten von der lokalen Platte auf den Netzwerk-Server ausgeführt
  • Eine Startmeldung wird ausgegeben
  • Für diesen Zweck wird ein spezielles Verzeichnis eingerichtet
  • Alle Dateien werden kopiert, der Kopiervorgang soll überprüft werden
  • Eine Abschlussmeldung ist auszugeben
Überlegungen / Annahmen
  • Die Sicherung der Daten erfolgt auf dem Laufwerk X: des Netzwerk-Servers
  • Es wird «nur kopiert», keine Komprimierung und kein Backup-Werkzeug werden verwendet
Lösung
Empfehlenswert ist die Kommentierung der Batch-Dateien. Verwenden Sie dazu den Befehl
REM (REMark für Notiz) oder einfach einen Doppelpunkt.

@ECHO OFF
CLS
REM ------------------------------------------------------------
REM Name: OFFICE_SAVE.BAT REM Autor: Stefan Lenz
REM Datum: 14. Februar 2002
REM ------------------------------------------------------------
ECHO Die Datensicherung der Office-Dokumete wird gestartet ..
ECHO. MD X:\BACKUP\LENZ

: Der Befehl XCOPY kann auch ein Verzeichnis erstellen: XCOPY-Parameter /S /E
: erspart den MD-Befehl, in diesem Lehrbeispiel wird aber die auführlichere
: explizite Verzeichniserstellung mittels MD bewusst eingesetzt.

XCOPY C:\DATEN\*.* X:\BACKUP\LENZ\*.* /V
ECHO.

ECHO Die Datensicherung wurde abgeschlossen ...
PAUSE
REM -------------------------- E O F ---------------------------

Erklärungen / Beschreibung
  • ECHO OFF schaltet die Anzeige der Kommandos aus, @ECHO OFF zeigt auch den Befehl ECHO OFF nicht an
  • CLS löscht den Bildschirm, ist nicht unbedingt notwendig aber sinnvoll
  • Zunächst wird ein Verzeichnis angelegt, anschliessend werden alle Dateien mit XCOPY kopiert und der Kopiervorgang über die Option /V geprüft
  • Meldungen auf dem Bildschirm werden mit ECHO ausgegeben. Die Verwendung von ECHO. (ohne Leerschlag) erzeugt eine Leerzeile auf dem Bildschirm
  • Am Ende der Jobs wird mit dem Befehl PAUSE ein Tastendruck des Benutzers abgewartet
  • REM-Einträge gelten als Kommentare, können auch durch einen Doppelpunkt ersetzt werden, dadurch wird die Zeile als Sprungmarke aufgefasst und vom Kommandointerpreter schneller abgearbeitet
  • Hinweis: Dieser Job führt keine Sicherheitsabfragen durch, wenn das Verzeichnis X:\BACKUP\LENZ bereits existiert, so erscheint eine Fehlermeldung
Benutzeingaben und Parameter-Verarbeitung
Bei der Programmierung von Batch-Dateien können Benutzereingaben als String (Zeichenfolge) nicht einfach eingelesen werden. Es ist also - ohne Zusatzprogramme - nicht möglich den Anwender nach seinem Namen zu fragen und die Eingabe in einer Variablen zu speichern. Die Abfrage eines Tastendruckes ist jedoch möglich, sie wird oft für ja / nein-Abfragen verwendet. («Sind Sie sicher (j/n)?»)

Eine Möglichkeit Benutzereingaben zu verarbeiten besteht nun darin, diese von der Kommandozeile einzulesen. Alle Parameter die einem Batch-Programm übergeben werden, sind in Speichervariablen mit den Namen %1 bis %9-Variablen gespeichert. Als Beispiel wird ein Programm für die Erstellung von Sicherungskopien verwendet, es benötigt zwei Parameter:
  • Quellpfad mit Dateinamen die gesichert werden sollen
  • Zielpfad mit Ordnernamen wohin die Dateien gesichert werden sollen

Eine mögliche Lösung für dieses Programm FILECOPY.BAT sieht wie folgt aus:

ECHO FILECOPY.BAT 1.0
ECHO Sichern von Dateien an einen beliebigen Ort
ECHO -------------------------------------------
ECHO.
IF "%1"=="" GOTO HILFE
IF "%2"=="" GOTO HILFE
IF "%1"=="/?" GOTO HILFE
GOTO START_FILECOPY

:HILFE
ECHO Sie müssen dem Programm FILECOPY.BAT zwei Parameter angeben:
ECHO    - Quellpfad mit Dateinamen die gesichert werden sollen
ECHO    - Zielpfad mit Ordnernamen wohin die Dateien gesichert werden sollen
ECHO.
ECHO Beispiel FILECOPY C:\DATEN\PRIVAT\*.* X:\BACKUP\LENZ
GOTO ENDE
:START_FILECOPY
IF NOT EXIST %1 GOTO FEHLER_QUELLE
IF NOT EXIST %2 MKDIR %2
XCOPY %1 %2 /S /E
GOTO ENDE
:FEHLER_QUELLE
ECHO Die Angaben des Quellpfades "%1" ist ungültig.
GOTO ENDE
:ENDE
ECHO Ende des FILECOPY.BAT, Danke für die Anwendung.

Erklärungen / Beschreibung
  • Parameter-Abfragen müssen - nicht nur in Batch-Programmen - mit doppelten Gleichheitszeichen '==' ausgeführt werden, mit nur einem Gleichheitszeichen interpretiert der Batch-Prozessor den Befehl als «Zuweisung» im Stil von "%1"="HILFE", der Wert des Parameters wird dabei überschrieben.
  • Sind die Parameter "%1" oder "%2" leer, so wird eine Hilfe angezeigt
  • Existiert das Zielverzeichnis noch nicht, so wird es durch einen MKDIR-Befehl erstellt
  • Die Parameter /S /E des XCOPY-Befehls kopieren auch Unterverzeichnisse und leere Verzeichnisse

Erweiterungen für Windows NT/XP und Windows Vista
Die Batch-Sprache wurde ab Windows NT von Microsoft stark erweitert. Dies war auch notwendig, wenn Windows NT bei den Administratoren grösserer Netzwerke neben UNIX einigermassen akzeptiert werden sollte. UNIX verfügt mit seinen Shell-Scripts schon seit den ersten Versionen über eine sehr mächtige Programmier- und Automatisierungs-Umgebung.

Stark erweitert wurden folgende Befehle

  • FOR-Schleife: Zählen, Dateien lesen usw.
  • CD / MD: Laufwerke und Verzeichnisse wechseln bzw. mehrere Verzeichnisse auf einmal anlegen
  • TIME / DATE: Ausgabe eines Zeitstempels, ohne Tastendruck
  • SET: Umgebungsvariablen abfragen, einfache Rechnungen sind möglich
  • IF-Abfragen: Vergleiche grösser als, kleiner als usw. sind möglich
  • GOTO: Kann ans Ende der Batch-Datei springen (GOTO :EOF)
  • CALL: Kann nach einem Aufruf direkt zu einer bestimmten Sprungmarke verzweigen
  • Neue Befehle sind PUSHD, POPD, FTYPE, SETLOCAL, ASSOC, CACLS, COMPACT, CONVERT usw.

Eine Auflistung aller Befehlserweiterungen kann mit CMD /? angezeigt werden. Ob die Befehlserweiterungen aktiviert sind, ist abhängig von Registry-Einstellungen. Standardmässig sind die Erweiterungen aktiv, können aber von einem System-Administrator auch deaktiviert werden, um eine bessere Kompatibilität zu Windows 9x-Systemen im Netzwerk zu erhalten. Die Registry-Pfade für die Aktivierung / Deaktivierung wird ebenfalls mit CMD /? angezeigt.

Alle Befehl von Windows NT/XP und Windows Vista zeigen mit dem Parameter «/?» eine ausführliche Hilfe an, beispielsweise mit FOR /?. 

Befehlsvereichnis von Windows Vista
Die folgende Liste stellt das Befehlsverzeichnis von Windows Vista für Batch-Programme dar:

C:\>help
Geben Sie HELP "Befehlsname" ein, um weitere Informationen zu einem bestimmten
Befehl anzugeigen.

ASSOC          Zeigt Dateierweiterungszuordnungen an bzw. ändert sie.
ATTRIB         Zeigt Dateiattribute an bzw. ändert sie.
BREAK          Schaltet die erweiterte Überprüfung für STRG+C ein bzw. aus.
BOOTCFG        Legt Eigenschaften zur Steuerung des Startladenvorganges in der
               Startdatenbank fest.
CACLS          Zeigt Datei-ACLs (Access Control List) an bzw. ändert sie.
CALL           Ruft eine Batchdatei von einer anderen Batchdatei aus auf.
CD             Zeigt den Namen des aktuellen Verzeichnisses an bzw. ändert
               diesen.
CHCP           Zeigt die aktive Codepagenummer an bzw. legt sie fest.
CHDIR          Zeigt den Namen des aktuellen Verzeichnisses an bzw. ändert
               es.
CHKDSK         Überprüft einen Datenträger und zeigt einen Statusbericht an.
CHKNTFS        Zeigt die Überprüfung des Datenträgers beim Start an bzw.
               verändert sie.
CLS            Löscht den Bildschirminhalt.
CMD            Startet eine neue Instanz des Windows-Befehlsinterpreters.
COLOR          Legt die Hintergrund- und Vordergrundfarben für die Konsole
               fest.
COMP           Vergleicht den Inhalt zweier Dateien oder Sätze von Dateien.
COMPACT        Zeigt die Komprimierung von Dateien auf NTFS-Partitionen an bzw.
               ändert sie.
CONVERT        Konvertiert FAT-Volumes in NTFS. Das aktuelle Laufwerk kann
               nicht konvertiert werden.
COPY           Kopiert eine oder mehrere Dateien an eine andere Stelle.
DATE           Zeigt das Datum an bzw. legt es fest.
DEL            Löscht eine oder mehrere Dateien.
DIR            Listet die Dateien und Unterverzeichnisse eines Verzeichnisses
               auf.
DISKCOMP       Vergleicht den Inhalt von zwei Disketten.
DISKCOPY       Kopiert den Inhalt von einer Diskette auf eine andere Diskette.
DISKPART       Zeigt Eigenschaften von Festplattenpartitionen an bzw.
               konfiguriert sie.
DOSKEY         Bearbeitet Befehlseingaben, erinnert Windows-Befehle und
               erstellt Macros.
DRIVERQUERY    Zeigt den aktuellen Gerätetreiberstatus und die
               Eigenschaften an.
ECHO           Zeigt Meldungen an bzw. schaltet die Befehlsanzeige
               ein oder aus.
ENDLOCAL       Beendet den lokalen Gültigkeitsbereich von Umgebungsänderungen
               in einer Batchdatei.
ERASE          Löscht eine oder mehrere Dateien.
EXIT           Beendet das Programm CMD.EXE (Befehlsinterpreter).
FC             Vergleicht zwei oder mehr Sätze von Dateien und zeigt die
               Unterschiede an.
FIND           Sucht eine Zeichenkette in einer oder mehreren Datei(en).
FINDSTR        Sucht Zeichenketten in Dateien.
FOR            Führt einen angegebenen Befehl für jede Datei in einem
               Dateiensatz aus.
FORMAT         Formatiert einen Dateinträger für die Verwendung mit Windows.
FSUTIL         Zeigt die Dateisystemeigenschaften an bzw konfiguriert sie.
FTYPE          Zeigt die Dateitypen an, die bei den Zuordnungen für die
               entsprechenden Dateierweiterungen verwendet werden bzw.
               ändert sie.
GOTO           Setzt den Windows-Befehlsinterpreter auf eine markierte Zeile in
               einem Batchprogramm.
GPRESULT       Zeigt Gruppenrichtlinieninformationen für Computer oder Benutzer
               an.
GRAFTABL       Ermöglicht Windows, Sonderzeichen im Grafikmodus anzuzeigen.
HELP           Zeigt Hilfeinformationen zu Windows-Befehlen an.
ICACLS         Anzeigen, Ändern, Sichern Wiederherstellen von ACLs für
               Date
ien und Verzeichnisse.
IF             Verarbeitet Ausdrücke in einer Batchdatei abhängig von
               Bedingungen.
LABEL          Erstellt, ändert oder löscht die Bezeichnung eines Volumes.
MD             Erstellt ein Verzeichnis.
MKDIR          Erstellt ein Verzeichnis.
MKLINK         Erstellt symbolische Links und feste Links.
MODE           Konfiguriert ein Systemgerät.
MORE           Zeigt Ausgabe auf dem Bildschirm seitenweise an.
MOVE           Verschiebt ein oder mehrere Dateien von einem Verzeichnis in
               ein anderes.
OPENFILES      Zeigt Dateien, die von Remotebenutzern zur Dateifreigabe
               geöffnet wurden an.
PATH           Legt den Suchpfad für ausführbare Dateien fest oder zeigt ihn an.

PAUSE          Hält die Ausführung einer Batchdatei an und zeigt eine Meldung an.
POPD           Wechselt zu dem Verzeichnis, das durch PUSHD gespeichert wurde.
PRINT          Druckt eine Textdatei.
PROMPT         Ändert die Eingabeaufforderung.
PUSHD          Speichert das aktuelle Verzeichnis, und wechselt zu einem
               anderen Verzeichnis.
RD             Entfernt ein Verzeichnis.
RECOVER        Stellt lesbare Daten von einem beschädigten Datenträger wieder
               her.
REM            Leitet Kommentare in einer Batchdatei bzw. CONFIG.SYS ein.
REN            Benennt eine Datei bzw. Dateien um.
RENAME         Bennent eine Datei bzw. Dateien um.
REPLACE        Ersetzt Dateien.
RMDIR          Löscht ein Verzeichnis.
ROBOCOPY       Erweitertes Dienstprogramm zum Kopieren von Dateien und
               Verzeichnisstrukturen
SET            Setzt oder löscht die Umgebungsvariablen bzw. zeigt sie an.
SETLOCAL       Startet die Begrenzung des Gültigkeitsbereiches von
               Umgebungsänderungen in einer Batchdatei.
SC             Zeigt  Dienste (=Hintergrundprozess) an bzw. konfiguriert sie.
SCHTASKS       Erstellt Zeitpläne für auf dem Computer auszuführende Befehle
               und Programme.
SHIFT          Verändert die Position ersetzbarer Parameter in Batchdateien.
SHUTDOWN       Ermöglicht lokales oder ferngesteuertes Herunterfahren des
               Computers.
SORT           Sortiert die Eingabe.
START          Startet ein eigenes Fenster, um ein bestimmtes Programm oder
               einen Befehl auszuführen.
SUBST          Ordnet einen Pfad einem Laufwerkbuchstaben zu.
SYSTEMINFO     Zeigt computerspezifische Eigenschaften und Konfigurationen an.
TASKLIST       Zeigt alle zurzeit laufenden Aufgaben inklusive der Dienste an.
TASKKILL       Bricht einen laufenden Prozess oder eine Anwendung ab oder
               beendet ihn bzw. sie.
TIME           Zeigt die Systemzeit an bzw. legt sie fest.
TITLE          Bestimmt den Fenstertitel des Eingabeaufforderungsfensters.
TREE           Zeigt die Ordnerstruktur eines Laufwerks oder Pfads grafisch an.
TYPE           Zeigt den Inhalt einer Textdatei an.
VER            Zeigt die Windows-Version an.
VERIFY         Legt fest, ob das ordnungsgemäße Schreiben von Dateien auf
               den Datenträger überprüft werden soll.
VOL            Zeigt die Volumebezeichnung und die Seriennummer des
               Datenträgers an.
XCOPY          Kopiert Dateien und Verzeichnisstrukturen.
WMIC           Zeigt WMI-Informationen in der interaktiven Befehlsshell an.

Weitere Informationen finden Sie in der Befehlszeilenreferenz der Onlinehilfe.