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.
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
Dateien 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.