Kurze Einführung in MS-DOS
von Prof. Jürgen Plate

Kurze Einführung in MS-DOS

Diese Einführung ist eigentlich uralt - aus den Zeiten, als die Comuter noch mittels kryptischer Kommando bedient wurden und keine grafische Bedienoberfläche hatten. Erstaunlicherweise hat MS-DOS alle bisherigen Windows-Versionen überlebt, angefangen von Windows 3.0 bis heute - und zwar in Form der sogenannten Eingabeaufforderung. Startet man diese, erscheint ein Terminalfenste mit schwarzem Hintergrund, das sich wie der Bildschirm des guten alten DOS verhält.

Erstaunlicherweise können sich heute wieder viele für die Möglichkeit begeistern, den PC per Kommandozeile zu steuern und dort Dinge zu erledigen, die unter Windows nur umständlich zu realisieren sind. Beispielsweise ein Backup von ganzen Ordner per xcopy-Kommando oder der Aufruf von ping oder tracert. Auch eine sehr primitive Kommandosprache ist vorhanden: es lassen sich Befehle in "Batch-Dateien" zusammenfassen und durch Starten der Batchdatei (Endung ".bat") en bloc ausführen.

Deshalb habe ich diese alte Anleitung wieder herausgekramt. Sie soll einen Kurzüberblick über MS-DOS geben. Mit dem Befehl help <Kommandoname> erfahren Sie mehr über das entsprechende Kommando.

Ein Kommando ist der Aufruf eines Programms (externes Kommando) oder eines internen DOS-Befehls (enthalten im Kommandointerpreter COMMAND.COM). Einige dieser Kommandos werden weiter hinten besprochen. Bei der Eingabe von Kommandos spielt die Gross/Kleinschreibung keine Rolle. Die Syntax ist bei allen Kommandos gleich:

<Kommandoname> <Parameter> <Parameter> ...

Die Parameter können entweder Dateinamen oder "Schalter" sein. Sie werden durch Leerzeichen voneinander getrennt. Zum Beispiel:

copy A:DATEI B:DATEI /V
        |       |    |
        Dateinamen Schalter
Bei vielen Kommandos können mehrere Dateien gleichzeitig bearbeitet werden. Dazu können sogenannte Jokerzeichen (Wildcards) im Dateinamen aufgeführt werden:

DATEI? deckt sich also z. B. mit DATEI1, DATEI2, DATEI3 - nicht aber mit DATEI12. DAT* deckt sich mit allen Namen die mit DATEI beginnen, also z. B. mit DATEI, DATEI1, DATEN, DATA, etc. *.* deckt sich mit allen Dateinamen.

Gerätenamen

Damit einzelne Kommandos anstelle von Dateien auch Geräte (z. B. den Drucker) ansprechen können, haben die Geräte festgelegte Namen, die jederzeit anstelle von Dateinamen eingesetzt werden können. Mit copy A:DATEI PRN: kann man eine Datei z. B. auf dem Drucker ausgeben. Gültige Gerätenamen sind:

CON: Ein-/Ausgabe über Bildschirm und Tastatur
PRN: Standard-Druckerausgabe (1. Druckerschnittstelle)
LPT1: 1. Druckerschnittstelle
LPT2: 2. Druckerschnittstelle
LPT3: 3. Druckerschnittstelle
COM1: 1. serielle Schnittstelle
COM2: 2. serielle Schnittstelle
NUL: leeres Pseudogerät ("schwarzes Loch" für Ausgaben)

Laufwerke

Disketten- und Festplattenlaufwerke werden durch einen einzigen Buchstaben identifiziert. Dem Buchstaben folgt zur Unterscheidung von Dateinamen ein Doppelpunkt. Ein physikalisches Laufwerk kann mehrere Laufwerksnamen haben. Wenn Sie z. B. noch ein Diskettenlaufwerk im Computer haben, kann dieses Laufwerk unter A: und B: angesprochen werden.

Der Wechsel des Laufwerks erfolgt auf Kommandoebene durch Eingabe des Laufwerksnamens. Das aktuell eingestellte Laufwerk wird bei der Bereitschaftsanzeige am Bildschirm ausgegeben:

C:\>aktuell ist Laufwerk C:
F:Kommando zum Laufwerkswechsel
F:\>neue Bereitschaftsanzeige

Dateiverzeichnisse

Auf einer Festplatte mit 100 MByte Kapazität oder mehr haben viele Dateien Platz. Um die Übersicht zu behalten muss man seine Dateien strukturieren. Dateiverzeichnisse (Directories, Unterverzeichnisse, Kataloge) bieten die Möglichkeit der Strukturierung der Dateien. In einem Verzeichnis werden logisch zusammenhängende Dateien und Programme abgelegt. Von "aussen" ist nur der Katalogname zu sehen. Verzeichnisse lassen sich "schachteln", d. h. ein Verzeichnis kann seinerseits Unterverzeichnisse enthalten.

Kommandos zur Arbeit mit Unterverzeichnissen:

Der Prompt-Befehl

Dieser Befehl verändert die Bereitschaftsanzeige (Prompt). Da er keinen Schaden anrichten kann, lässt sich wunderbar damit spielen. Durch den Befehl prompt ohne Parameter wird der Urzustand wiederhergestellt. Parameter ist eine beliebige Zeichenkette, die dann als Bereitschaftsanzeige verwendet wird. So führt der Befehl prompt Nächstes Kommando: zur Bereitschaftsanzeige:

Nächstes Kommando:
Deshalb wird die Bereitschaftssanzeige auch kurz als "Prompt" bezeichnet und vielfach läuft die gesamte Eingabeaufforderung unter der Bezeichnung "DOS-Prompt". Es gibt eine Reihe von Spezialzeichenkombinationene für Sonderfunktionen, die alle mit einem "$"_Zeichen beginnen:

ZeichenAnzeige
$$ $
$_ Zeilenvorschub
$b
$d Anzeige des Datums
$e Das ESC-Zeichen
$g >
$h Rückschritt ein Zeichen (zum Löschen von Zeichen)
$l <
$n Das aktuelle Laufwerk
$p Das aktuelle Verzeichnis
$q =
$s Leerzeichen
$t Die Uhrzeit
$v Die DOS-Version

Als Standardprompt ist meist prompt $p$g eingestellt. Beispielsweise würde prompt $n$p$s$g immer das aktuelle Laufwerk und das aktuelle Verzeichnis anzeigen. prompt $d$s$s$t$_$n$p$s$g zeigt in der ersten Zeile Datum und Uhrzeit und in der folgenden Zeile Laufwerk und Verzeichnis an.

Kommandos zur Arbeit mit Disketten und Dateien und Info-Kommandos

attribSchreibschutz setzen/löschen und andere Attribute ändern
chkdskPlatte überprüfen (veraltet)
copyDatei(en) kopieren
compVergleicht den Inhalt zweier Dateien oder Sätze von Dateien
delDatei(en) löschen
dirAnzeige von Dateien (siehe oben)
findSuchen in Dateien
formatFormatiert einen Dateinträger für die Verwendung mit Windows
mklinkErstellt symbolische Links und feste Links
moreZeigt Ausgabe auf dem Bildschirm seitenweise an
moveVerschiebt ein oder mehrere Dateien von einem Verzeichnis in ein anderes
printDruckt eine Textdatei oder gibt sie aus
rename, renDateien umbenennen
sortSortiert die Eingabe
substOrdnet einen Pfad einem Laufwerkbuchstaben zu
systeminfoZeigt computerspezifische Eigenschaften und Konfigurationen an
tasklistZeigt alle zurzeit laufenden Aufgaben inklusive der Dienste an
treeVerzeichnisstruktur anzeigen (Erweiterung von dir)
typeDatei ausgeben
verZeigt die Windows-Version an
volZeigt die Volumebezeichnung und die Seriennummer des Datenträgers an
xcopyErweitertes Kopierprogramm

Bei der Besprechung der wichtigsten Kommandos auf den folgenden Seiten werden nur die am häufigsten verwendeten Parameter erwähnt. Für eine vollständige Beschreibung der Kommandos sehen Sie bitte im Handbuch nach. Alternativ können Sie das Kommando mit dem Parameter "/?" aufrufen oder das Kommando help <Kommandoname> verwenden.

Das copy-Kommando

ist das wohl am häufigsten gebrauchte Kommando. Es dient zum Übertragen von Dateien zwischen verschiedenen Laufwerken und Verzeichnissen. Mit copy ist auch die Ausgabe von Dateien auf Geräten und das Zusammenführen von Dateien möglich.

copy arbeitet nur innerhalb eines Verzeichnisses. Will man ganze Verzeichnisse einschließlich der Unterverzeichnisse kopieren, muss man xcopy verwenden. Aufruf: copy Quellpfad Zielpfad. Besteht die Angabe des Zielpfades nur aus dem Datenamen, ist das aktuelle Laufwerk/Verzeichnis Zielverzeichnis. Fehlt die Zielangabe ganz, erhalten die neuen Dateien den gleichen Namen wie die Quelldateien.

Beispiele (mit Erläuterung):

copy C:DATEN D:DATEN Kopiert DATEN von Laufwerk C: nach D:
copy C:DATEN D: Dasselbe, nur kürzer geschrieben
copy DATEN DATEN.BAK Anlegen einer Backup-Datei
copy C:TEXT Kopieren der Datei TEXT auf Laufwerk C in das aktuelle Laufwerk
copy C:*.BAT D: Kopieren aller Batch-Dateien nach Laufwerk D:
copy C:*.* Kopieren aller Dateien von Laufwerk C: auf das aktuelle Laufwerk
copy \TEXTE\BRIEF \INFOS Kopieren der Datei BRIEF aus dem Verzeichnis TEXTE in die Datei INFOS im Hauptverzeichnis. Wenn INFOS ein Verzeichnis ist, wird in INFOS eine Datei BRIEF angelegt (zweideutig!!!).
copy T1+T2+T3 T.GES Die Dateien T1, T2 und T3 werden in der Datei T.GES vereinigt.
copy *.TX1+*.TX2 *.TXT Es werden jeweils die Dateien gleichen "Vornamens" zusammenkopiert (T1.TX1+T1.TX2 → T1.TXT sowie T2.TX1+T2.TX2 → T2.TXT, usw.
copy CON: TEST Die Tastatureingabe wird in die Datei TEST kopiert. Die Eingabe wird mit Strg-Z beendet.

Das xcopy-Kommando

Kopiert Dateien und komplette Verzeichnisstrukturen. Das Kommando hat fast 30 Parameter, weshalb hier nur die wichtigsten aufgeführt werden. Der generelle Aufruf lautet xcopy Quellpfad Zielpfad Parameter:

  /A        kopiert nur Dateien mit gesetztem Archivattribut, ändert das Attribut nicht.
  /M        kopiert nur Dateien mit gesetztem Archivattribut und löscht das Attribut.
  /D:M-T-J  kopiert nur die an oder nach dem Datum geänderten Dateien.
            ist kein Datum angegeben, werden nur Dateien kopiert,
            die neuer als die bestehenden Zieldateien sind.
  /S        kopiert Verzeichnisse und Unterverzeichnisse, die nicht leer sind.
  /E        kopiert alle Unterverzeichnisse (leer oder nicht leer).
  /Q        zeigt beim Kopieren keine Dateinamen an (quiet).
  /F        zeigt die Namen der Quell- und Zieldateien beim Kopieren an.
  /H        kopiert auch Dateien mit den Attributen 'Versteckt' und 'System'.
  /R        überschreibt schreibgeschützte Dateien.
  /U        kopiert nur Dateien, die im Zielverzeichnis vorhanden sind.
  /K        kopiert alle Attribute. Standardmäßig wird 'Schreibgeschützt' gelöscht.

Dank seiner vielen Parameter kann xcopy für die Datensicherungen benutzt werden. Seit Windows Vista muss man die Eingabeaufforderung "als Administrator ausführen", um diesen Befehl nutzen zu können. Bei sehr umfangreichen Kopieraufträgen ist xcopy unzuverlässig. Das Programm erstellt zu Arbeitsbeginn eine Liste aller zu kopierenden Dateien. Wenn die Anzahl der Dateien zu groß ist, passt diese Liste nicht in den Speicher. Der Kopiervorgang ist dann unvollständig.

xcopy [QUELLE] [ZIEL] /S /E /C /H /O /R /Y /D /V

Mit diesem Befehl werden alle Unterverzeichnise (/S), unabhängig davon, ob sie leer sind oder nicht (/E), von [QUELLE] zu [ZIEL] kopiert. Hierbei wird das Kopieren auch dann fortgesetzt, wenn Fehler auftauchen (/C) oder die Dateien eigentlich als "versteckt" oder "System" gekennzeichnet sind (/H). Zusammen mit der Datei werden auch alle Schreib- und Benutzerrechte mit kopiert, die für diese Datei im System hinterlegt sind (/O).
Ist im Zielverzeichnis bereits eine alte Version des Backups vorhanden, soll xcopy sie auch dann überschreiben, wenn sie schreibgeschützt sind (/R). Zur Vermeidung von ständigen Fragen wird (/Y) angegeben. Es sollen dabei nur die jeweils aktuelleren Dateien erhalten bleiben (/D). Als zusätzliche Absicherung kann xcopy auch alle kopierten Dateien überprüfen (/V).

Für umfangreiche Kopierarbeiten wurde ein Nachfolger entwickelt. Das Programm robocopy ist deutlich robuster als xcopy. In Windows Vista und Nachfolgern gehört es zum Betriebssystem, sogar mit Erläuterungen in deutscher Sprache.

Das Attribut-Kommando

Das Kommando attrib zeigt Dateiattribute an oder ändert sie. Es werden die Attribute "schreibgeschützt", "archiv", "system" und "versteckt", die Dateien oder Verzeichnissen zugewiesen wurden, angezeigt. Di Syntax lautet:

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I] [Pfad] [/S [/D] [/L]]

Wird nur ein Pfad angegeben, zeigt das Kommando alle Dateien und deren Attribute an. Bei Angae von Attributwerten setzt "+" ein Attribut und "-" löscht ein Attribut. Es gibt die folgenden Attribute:

  R   Attribut für 'schreibgeschützte Datei'
  A   Attribut für 'zu archivierende Datei'
  S   Attribut für 'systemdatei'
  H   Attribut für 'versteckte Datei'
  I   Attribut für 'inhalt nicht indiziert'

Hinter der Pfadangabe (Verzeichnis oder Datei) können noch folgende Parameter angegeben werden:

  /S        verarbeitet passende Dateien im aktuellen Verzeichnis und in allen Unterverzeichnissen.
  /D        verarbeitet auch die Verzeichnissse selbst.
  /L        verarbeitet die Attribute des symbolischen Links anstelle des Linkziels.

Das find-Kommando

Sucht in einer oder mehreren Dateien nach einer Zeichenfolge. Die Syntax lautet:
FIND [/V] [/C] [/N] [/I] "Zeichenfolge" [Pfad]

Zu beachten ist, dass die Parameter vor dem Suchbegriff eingefügt werden müssen. Es gibt vier Parameter:

  /V        Zeigt alle Zeilen an, die die Zeichenfolge NICHT enthalten.
  /C        Zeigt nur die Anzahl der die Zeichenfolge enthaltenden Zeilen an.
  /N        Zeigt die Zeilen mit ihren Zeilennummern an.
  /I        Ignoriert Groß-/Kleinschreibung bei der Suche.

Fehlt der Pfad, so durchsucht FIND von der Tastatur aus eingegebenen Text oder die Ausgabe des Befehls, der FIND in einer Pipe (Befehlsverkettung) vorangestellt ist.

Eine wesentlich erweiterte Suche erlaubt das Programm findstr, das mit regulären Ausdrücken arbeitet (ähnlich dem grep bei Unix/Linux).

Ein- und Ausgabeumleitung

Bildschirm-Ausgaben und Tastatur-Eingaben lassen sich auf Dateien oder Geräte umleiten. Das funktioniert auf der Kommandozeile und innerhalb von Batch-Dateien (siehe unten). Die Umleitung erfolgt über folgende Symbole:

Umgeleitet werden können jedoch nur die Standardausgabe und die Standardeingabe von DOS. Die Standard-Fehlerausgabe wird weiterhin im DOS-Fenster ausgegeben. Ob und welche Ausgaben eines Programmes sich umleiten lassen, muss man gegebenenfalls durch Ausprobieren herausfinden.

Die Ausgabeumleitung wird häufig dann eingesetzt, wenn man den Output eines Programms anderweitig weiterverarbeiten will, z. B. in einer Dokumentation. Bei der Ausgabeumleitung gibt es noch eine weitere Besonderheit: Ein einfaches ">" verwendet immer eine leere Datei. Falls die Datei schon existierte, wird sie überschreiben. Man kann jedoch mittels ">>" Informationen am Ende einer existierenden Datei anhängen. Dazu einige Beispiele:

echo "Hallo Welt" > test                Schreibt die Zeile "Hallo Welt" 
                                        in die Datei "test"
dir >> test                             Hängt die Verzeichnisliste an
                                        die Datei "test" an
ech "fertig" >> test                    Schreibt "Fertig" als letzte
                                        Zeile in die Datei "test"

Geräte-Namen koennen unter DOS (fast) wie Dateinamen verwendet werden. Die Ausgabe kann also auch z. B. an die serielle Schnittstelle geschickt werden:

copy daten.txt > :COM1

NUL ist ein Pseudo-Gerät, das aber benutzt werden kann, um Ausgaben ins Nichts zu schicken. Damit lassen sich z. B. unerwünschte Ausgaben in Batch-Dateien unterdrücken, sofern die Standard-Ausgabe verwendet wird.

copy datei.txt D: >NUL               unterdrückt die Meldung 
                                        " nn Datei(en) kopiert"

Wenn das entsprechende Programm nichts ausgibt, wird trotzdem die angegebene Datei erstellt. Eine Umleitung beim Aufruf einer Batch-Datei ist wirkungslos. Wer auf diese Weise ALLE Ausgaben einer Batch-Datei umleiten will, muss dazu eine weitere Inkarnation des Kommandointerpreters starten, z. B. durch cmd.exe /C tuwas.bat > datei.

Wie bei der Ausgabe-Umleitung ist auch bei der Eingabe eine Umleitung nur möglich, wenn das Programm von der Standardeingabe liest. Normalerweise handelt es sich hierbei um die Tastatur. Quelle für eine Eingabeumleitung kann auch ein Gerät sein, z. B. COM1.

Die Eingabe-Umleitung ist das Gegenstück zur Ausgabe-Umleitung. Dabei werden Eingaben, die eigentlich von der Tastatur erwartet werden, aus einer Datei eingelesen. Zum Beispiel:

more < ein_langer.txt

Das DOS-Programm more gibt den Inhalt der Datei auf dem Bildschirm aus, und zwar mit Stopp nach jeder vollen Seite.

Als letzte Möglichkeit kann die (Standard-)Ausgabe eines Programms mittels "|" in die (Standard-)Eingabe eines anderen gleitet werden, zum Beispiel:

foobar | sort                Ausgabe des Programms "foobar"
                             sortiert ausgeben
echo J | del C:\*.*          Nachfrage "wollen Sie wirklich..."
                             automatisch beantworten

Das "|" wird auch "Pipe" (Röhre) genannt und bewirkt, dass die Ausgabe von der linken Seite als Eingabe für die rechte Seite verwendet wird. DOS produziert dazu zwar insgeheim eine Zwischendatei (im Verzeichnis %TEMP%), aber man braucht sich um deren Namen und um das anschließende Löschen nicht zu kümmern.

Es lassen sich mehrere Umleitungen hintereinander schalten. Für die richtige Reihenfolge gilt, dass mit "|" (Pipe) verbundene Programme immer von links nach rechts abgearbeitet werden. Befehlsparameter und Optionen müssen unmittelbar auf den zugehörigen Befehl folgen.

Programme, die von der Standardeingabe lesen und auf die Standardausgabe schreiben, nennt man auch "Filter". Es gibt drei Filter unter den DOS-Kommandos:

Batch-Betrieb

Der Batch-Betrieb (Stapelverarbeitung) erlaubt die Zusammenfassung mehrerer Kommandos, die hintereinander ausgeführt werden sollen in einer Batch-Datei (Befehls-Datei). Die Befehlsdatei wird durch Eingabe ihres Namens - also auf die gleiche Weise wie ein einzelnes Kommando - aufgerufen.

Über Parameter, die beim Aufruf angegeben werden können, lässt sich der Ablauf der Batch-Datei steuern. Zusätzliche Stapelbefehle erlauben eine komfortablere und flexiblere Gestaltung des Ablaufs. Dadurch, dass sich Programmparameter in der Stapeldatei fest einstellen lassen, macht das Batch-System die Bedienung des Computers für den Benutzer einfacher. Eine Batch-Datei hat immer die Endung ".bat" und wird als Textdatei mit einem Editor erstellt.

Ein erstes Beispiel:

Hat man seine Festplatte ordentlich in Unterverzeichnisse unterteilt, ist zum Aufruf einer Applikation, z. B. der Fakturierung eine Folge von Kommandos nötig. Diese Kommandofolge schreibt man in eine Batchdatei und kann so mit einem Befehl (FAKT) die Applikation aufrufen:

cd FAKTURA                         Wechsel ins Verzeichnis
fbackup.exe                        Backup machen
faktura.exe                        Aufruf des Programms
cd \                               zurück ins Hauptverzeichnis

Neben dem rein sequentiellen Ablauf können auch Bedingungen und Schleifen programmiert werden. Für diesen Zweck besitzt das DOS spezielle Batch-Kommandos:

BREAKSchaltet die erweiterte Überprüfung für STRG+C ein bzw. aus
CALLRuft eine Batchdatei von einer anderen Batchdatei aus auf
CLSLöscht den Bildschirminhalt
CHOICEErlaubt die Eingabe von Optionen, die dann den Errorlevel setzen
COLORLegt die Hintergrund- und Vordergrundfarben für die Konsole fest
DATEZeigt das Datum an bzw. legt es fest
ECHOZeigt Meldungen an bzw. schaltet die Befehlsanzeige ein oder aus
EXITBeendet die Eingabeaufforderung (Befehlsinterpreter CMD.EXE)
FORFührt einen angegebenen Befehl für jede Datei in einem Dateiensatz aus
GOTOSpringt zu einer markierte Zeile in einem Batchprogramm
IFVerarbeitet Ausdrücke in einer Batchdatei abhängig von Bedingungen
PAUSEHält die Ausführung einer Batchdatei an und zeigt eine Meldung an
REMLeitet Kommentare in einer Batchdatei ein
SETSetzt oder löscht die Umgebungsvariablen bzw. zeigt sie an
SHIFTVerändert die Position ersetzbarer Parameter in Batchdateien
SHUTDOWNErmöglicht Herunterfahren des Computers
STARTStartet ein bestimmtes Programm in einem neuen Fenster
TASKKILLBeendet einen laufenden Prozess oder eine Anwendung
TIMEZeigt die Systemzeit an bzw. legt sie fest

Übergabeparameter und echo

Wie bei einem Programm kann man auch einem Batch-Job Parameter übergeben. Diese Parameter werden in der Batch-Datei durch die Platzhalter %0 bis %9 dargestellt. Der Platzhalter %0 enthält den Namen der Batch-Datei. Die folgende Beispieldatei enthält die Zeilen:

echo Ich bin die Batchdatei %0
echo Inhalt von %1
dir /W %1

Der Aufruf t1.bat D:\test führt im Batch-Job zu folgender Ausgabe:

D:\>echo Ich bin die Batchdatei t1.bat
Ich bin die Batchdatei t1.bat

D:\>echo Inhalt von D:\test
Inhalt von D:\test

D:\>dir /W D:\test
 Datenträger in Laufwerk D: ist DATA
 Volumeseriennummer: 225B-A85F

 Verzeichnis von D:\test

[.]          [..]         bild1.jpg    bild2.jpg    bild3.jpg    bild4.jpg
bild5.jpg    bild6.jpg    bild7.jpg    dd0.pdf      index.html   [t1]
[t2]         [t3]         [t4]         [t5]
               9 Datei(en),      1.522.271 Bytes

So ganz befriedigend ist der Output nicht, weil alle ausgeführten Kommandos geechot werden. Das mag beim Test ganz praktiksch sein, bei der endgültigen Batchdatei will man das aber meist nicht.

echo gibt normalerweise aslles aus, was hinter dem Kommando in der Eingabezeile steht. Durch echo off kann hingegen das Echo der Kommandos abgeschaltet und durch echo off wieder eingeschaltet werden. Ist die Anzeige abgeschaltet, kann man nach dem Wort echo einen beliebigen Text plazieren, der dann auf dem Bildschirm ausgegeben wird. Üblicherweise wird das Echo in Batch-Dateien gleich zu Anfang abgeschaltet. Die geänderte Batchdatei sieht dann folgendermaßen aus:

echo off
echo Ich bin die Batchdatei %0
echo Inhalt von %1
dir /W %1

Der Aufruf t1.bat D:\test führt im Batch-Job zu folgender verbesserten Ausgabe:

F:\>echo off
Ich bin die Batchdatei t1.bat
Inhalt von D:\test
 Datenträger in Laufwerk D: ist DATA
 Volumeseriennummer: 225B-A85F

 Verzeichnis von D:\test

[.]          [..]         bild1.jpg    bild2.jpg    bild3.jpg    bild4.jpg
bild5.jpg    bild6.jpg    bild7.jpg    dd0.pdf      index.html   [t1]
[t2]         [t3]         [t4]         [t5]
               9 Datei(en),      1.522.271 Bytes
               7 Verzeichnis(se), 73.434.910.720 Bytes frei

Jetzt stört eigentlich nur das Echo des echo off. Damit aber dieses Kommando nicht selbst trotzdem dargestellt wird, wird ihm ein Klammeraffe (@) vorgestellt, also @echo off. Das Voranstellen des Klammeraffen, um das Echo abzuschalten, funktioniert natürlich bei jedem Kommando. Die Beispieldatei lautet dann endgültig:

@echo off
echo Ich bin die Batchdatei %0
echo Inhalt von %1
dir /W %1

Ohne jeden Parameter aufgerufen gibt echo den jeweiligen Zustand (ON oder OFF) aus, nicht etwa eine Leerzeile. Um eine Leerzeile auszugeben müssen Sie das echoKommando mit direkt folgendem Punkt angeben, also "echo.".

Eigentlich waren wir ja noch bei den Platzhaltern, die aus einem Prozentzeichen mit der laufenden Nummer des Befehlsparameters bestehen, also %1 ... %9. Es ist nur eine Ziffer möglich.

Was aber, wenn es mehr als neun Parameter gibt? Dann hilft der shift-Befehl. shift verschiebt alle Parameter nach links, d. h. %0 fällt heraus, %1 wird zu %0, %2 wird zu %1 und so weiter. shift kann bei Bedarf wiederholt werden. So kann auch eine variable Zahl von Parametern verarbeitet werden.

Umgebungsvariable und set

In Batch-Dateien lassen sich Variable benutzen, die als sogenannte Umgebungsvariable (auch "Shellvariable") in einem besonderen Speicherbereich des Kommandointerpreters liegen. Eine Variable wird durch eine Wertzuweisung definiert. Jede Werzuweisung erfolgt in der Form

   set <Variablenname>=<Zeichenfolge (String)>   , z. B.:
   set PROMPT=$p$g
   set TEMP=D:\TMP

Der aktuelle Inhalt dieses Speichers kann jederzeit mit dem Kommando set (ohne Parameter!) auf der DOS-Befehlsebene aufgelistet werden.

Der Kommandointerpreter bedient sich der Umgebungsvariablen, um bestimmte Informationen zu ermitteln, beispielsweise die Verzeichnispfade, in denen Programme gesucht werden sollen (PATH) oder die Darstellung des Prompt (PROMPT). Alle Programme können diese Informationen nutzen. Durch Angabe des Variablennamens, eingeschlossenen in Prozentzeichen, kann der aktuelle Wert an jeder beliebigen Stelle der Batch-Datei verwendet werden:

D:\>echo %PATH%
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;...

F:\>echo %PROMPT%
$P$G

F:\>echo %windir%
C:\Windows

Mit set können neue Zuweisungen aufgenommen sowie bestehende geändert oder gelöscht werden. Dabei sollten rechts und links vom Gleichheitszeichen keine Leerzeichen stehen. Sethet rechts vom Gleichheitszeichen nichts, wir die Variable gelöscht. Zur Unterscheidung von Programmen schreibt man die Variablennamen oft in Großbuchstaben. Beispiel:

@echo off
set BLA=fasel
echo %BLA%
set BLA=
Ausgabe:
fasel
ECHO ist ausgeschaltet (OFF).
Die letzte Meldung rührt daher, dass die Variable BLA nicht definiert ist und daher echo ohne Parameter aufgerufen wurde. Beim Abarbeiten der Batch-Datei untersucht DOS jede Zeile vor der Ausführung auf %-Zeichen und ersetzt den Variablennamen durch die zugewiesene Zeichenfolge. Dabei ist es gleichgültig, ob sich die Variable in einem Text, einer Anweisung, einem GOTO-Ziel oder in sonstigen Angaben befindet. Ausgenommen sind nur Labels. Ist eine Variable nicht vorhanden, wird nichts eingesetzt, d. h. der Ausdruck zwischen den %-Zeichen wird einfach entfernt. Um das Prozentzeichen in einem Text zu zeigen, muß es verdoppelt werden.

Bei Variablennamen wird Groß- und Kleinschreibung nicht unterschieden. Die zugewiesene Zeichenfolge wird dagegen immer unverändert gespeichert. Variablen-Namen bestehen auch Buchstaben, Ziffern und Sonderzeichen, wobei man sich aber auf den Unterstrich "_" beschränken sollte (obwohl etwas wie set X+27-3=61 möglich wäre. Sie dürfen jedoch nicht mit einer Ziffer beginnen, denn %0...%9 sind für Befehlsparameter reserviert. Sie sollten auch nicht versehentlich Variablennamen verwenden, die bereits verwendet werden (wie z.B. PATH oder PROMPT) - außer, Sie wollen den Inhalt erweitern, z. B. durch PATH=%PATH%;C:\dingsda\bin\.

Windows setzt übrigens einige Variable mit klein geschriebenem Namen, z. B. windir=C:\Windows. Damit können diese Variable mit dem set-Kommando weder geändert noch gelöscht werden. Mit set wird der Variablen der gesamte Rest der Zeile zwischen dem Gleichzeichen und dem Zeilenende zugewiesen. Die Zeichenfolge kann also auch aus mehreren Wörtern, Steuerzeichen usw. bestehen. Nur ein weiteres Gleichheitszeichen in der Zeichenfolge wird bemängelt (Syntax-Fehler). Der Speicherplatz für Umgebungsvariable ist begrenzt. Man sollte daher am Ende einer Batch-Datei alle nicht mehr benötigten Variablen löschen. Das folgende Beispiel zeigt die Verkettung von Strings mit Variablen, den Gebrauch von shift und gibt eine Vorschau auf weiter unten beschriebene Batch-Befehle. Der Vergleich %0X==X wird genau dann wahr, wenn %0 keinen Wert enthält und das ist der Fall, wenn alle Parameter bearbeitet wurden.

@echo off
:WEITER
if %0X==X goto ENDE
echo Der aktuelle Parameter ist: %0
shift
goto WEITER
:ENDE
echo Fertig ...
Ein Aufruf mit drei Parametern ergibt folgende Ausgabe:
F:\>t1.bat eins zwei drei
Der aktuelle Parameter ist: t1.bat
Der aktuelle Parameter ist: eins
Der aktuelle Parameter ist: zwei
Der aktuelle Parameter ist: drei
Fertig ...

Ablaufsteuerung und rem

rem erlaubt Kommentarzeilen in der Batch-Datei. Hinter rem kann ein beliebiger Text stehen. Die Zeile wird nur ausgegeben, wenn ECHO ON eingestellt ist. 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.

Oft ist es nötig, die Abarbeitung der Batch-Datei anzuhalten, um beispielsweise auf das Einlegen einer DC-ROM zu warten. pause Unterbricht die Ausführung und gibt den Text "Drücken Sie eine beliebige Taste ..." aus. Wenn man dann eine Taste drückt, wird die Ausführung fortgesetzt (mit "Strg+C" könne man den Ablauf an der Stelle auch abbrechen). Hinter dem Befehl kann ein Text stehen, der dann anstelle des Standardtextes ausgegeben wird.

Mit dem Programm choice können Benutzer ein Element aus einer Liste auswählen und den Index der Auswahl über den Errorlevel wiedergeben. Damit sind gezielte Eingabe-Abfragen, z. B. Menüs, in einer Batch-Datei möglich. die wichtigsten Parameter sind:

Die Umgebungsvariable ERRORLEVEL wird auf den Index des Wertes gesetzt, der aus der Liste ausgewählt wurde. Das erste Zeichen ergibt den Wert 1, die zweite den Wert 2 usw. Falls der Benutzer eine unzulässige Taste drückt, erfolgt ein akustisches Signal. Im Fehlerfall wird ein ERRORLEVEL von 255 zurückgegeben. Beim Drücken von [STRG]+[Untbr] oder [STRG]+[C] wird ein ERRORLEVEL-Wert von 0 wiedergegeben. Beispiele:

choice /C JNA /M "Drücke J für Ja, N für Nein oder A für Abbrechen"
choice /C XYZ /T 10 /D Y
choice /C 1234 /M "Wählen Sie die gewünschte Option "

ERRORLEVEL ist jedoch keine "richtige" Variable, so erlaubt es DOS nicht, den Errorlevel in Form einer Variablen zu verwenden. Fast jedes DOS-Programm liefert beim Beenden einen Abschluß-Fehlercode. Falls das Programm fehlerfrei ablief, so gibt es in der Regel den Wert 0 zurück, falls es Fehler gab eine Fehlernummer. Diese Fehlernummer ist der sogenannte ERRORLEVEL. Sie kann aber nur mittels if-Befehl abgefragt werden. Wichtig ist, dass hier immer mit der größten Nummer angefangen wird, weil der if-Befehl nicht auf Gleichheit, sondern auf größer oder gleich prüft:

Zur Speicherung des ERRORLEVEL in einer "echten" Variablen gibt es auf den ersten Blick nur die Methode mit 255 einzelnen ifAbfragen und set-Befehlen:

if ERRORLEVEL 255 set ERROR=255
if ERRORLEVEL 254 set ERROR=254
if ERRORLEVEL 253 set ERROR=253
   ...
if ERRORLEVEL 3 set ERROR=3
if ERRORLEVEL 2 set ERROR=2
if ERRORLEVEL 1 set ERROR=1
if ERRORLEVEL 0 set ERROR=0

Kontrollstrukturen

Kontrollstrukturen bieten die Möglichkeit, den linearen Ablauf einer Batch-Datei zu verändern. Dazu stehen hier leider nur wenige und unstrukturierte Befehle zur Verfügung, es reicht jedoch für die wichtigsten Aufgaben.

goto
Mit dem Befehl goto können Sie den Kommandointerpreter veranlassen, nicht in der nächsten Zeile mit der Bearbeitung fortzufahren, sondern zu einer bestimmten Stelle in der Batch-Datei zu springen. Diese Stelle wird durch eine Marke gekennzeichnet, die aus einem Markennamen mit nachfolgendem Doppelpunkt besteht. So lassen sich z. B. Schleifen programmieren:

  
@echo off
:WEITER
echo Hallo Welt
shift
goto WEITER

Aus so einer "unendlichen Schleife" kommt man nur durch Drücken von [Strg]-[Untbr] oder [Strg]-[C] wieder heraus.

if
if dient der Abfrage von Bedingungen. Sie können drei verschiedene Formen von Bedingungen überprüfen, die Existenz einer Datei, die Gleichheit zweier Zeichenketten und den Rückgabewert (ERRORLEVEL) des zuletzt gelaufenen DOS-Programms. Einziger Operator ist NOT, um die Bedingung umzukehren. Es gibt keinerlei logische Verknüpfungen. Nach der Bedingung steht auch ein einziger Befehl oder Kommandoaufruf. Deshalb werden in der Regel if-Befehle mit dem goto verknüpft, wenn abhängig von der Bedingung mehrere Befehle ausgeführt werden sollen.

Das Format des Befehls ist if <Bedingung> <Befehl>. Als Bedingung kommen folgende Ausdrücke in Frage:

Beispiel:

@echo off
:WEITER
CHOICE /C:ABCE /M "Drücken sie eine der Tasten"
if ERRORLEVEL 4 goto ENDE
if ERRORLEVEL 3 echo C eingegeben.
if ERRORLEVEL 2 echo B eingegeben.
if ERRORLEVEL 1 echo A eingegeben.
goto WEITER
:ENDE
echo Uffff....

Ein Aufruf ergibt etwa folgende Ausgabe:

Drücken sie eine der Tasten [A,B,C,E]?A
A eingegeben.
Drücken sie eine der Tasten [A,B,C,E]?C
C eingegeben.
B eingegeben.
A eingegeben.
Drücken sie eine der Tasten [A,B,C,E]?B
B eingegeben.
A eingegeben.
Drücken sie eine der Tasten [A,B,C,E]?E
Uffff....

Sie sehen schon, dass es nicht ganz so wie gedacht läuft. Je nach Eingabe werden mehere Echo-Zeilen ausgegeben. Also muss die Batch-Datei noch weiter entwickelt werden:

@echo off
:WEITER
CHOICE /C:ABCE /M "Drücken sie eine der Tasten"
if ERRORLEVEL 4 goto ENDE
if ERRORLEVEL 3 goto C
if ERRORLEVEL 2 goto B
if ERRORLEVEL 1 goto A
:C
echo C eingegeben.
goto WEITER
:B
echo B eingegeben.
goto WEITER
:A
echo A eingegeben.
goto WEITER
:ENDE
echo Uffff....

Nun stimmt auch die Ausgabe:

Drücken sie eine der Tasten [A,B,C,E]?A
A eingegeben.
Drücken sie eine der Tasten [A,B,C,E]?B
B eingegeben.
Drücken sie eine der Tasten [A,B,C,E]?C
C eingegeben.
Drücken sie eine der Tasten [A,B,C,E]?E
Uffff....
for

Führt einen Befehl für jeden einzelnen Wert einer Liste aus. Diese Liste steht in Klammern und kann aus einzelnen Zahlen oder Worten bestehen, aber auch eine oder mehrere Dateinamen mit Jokerzeichern enthalten ("?" steht für ein beliebiges Zeichen und "*" für eine Folge beliebiger Zeichen). Die Syntax des Befehls lautet:

for %%Laufvariable in (Liste) do <Kommando>
Im Gegensatz zu den an anderer Stelle verwendeten Variablen, wird die Laufvariable nicht in %...% eingeschlossen, sondern hat zwei Prozentzeichen vor dem Namen. Wenn sie im Kommando als Parameter verwendet wird, muss auch hier "%%" verwendet werden. Beispiele:

for %%d in (*.TXT) do copy %%d D:\Texte\
for %%1 in (dat1 dat2 dat3) do del %%1
for %%d in (*.*) echo %%d

Die doppelten Prozentzeichen sind wegen der recht rudimentären Variablenbehandlung des Kommandointerpreters nötig. Wenn Sie for direkt auf der Kommandozeile anwenden reicht nämlich ein Prozentzeichen. Statt einer Liste darf auch eine Variable in der Klammer stehen. Diese Variable kann auch eine ganze Pararmeter- oder Argument-Liste enthalten, die sich dann mit for wieder zerlegen läßt. Beispiel:

for %%a in (%PATH%) do echo %%a

Das zeigt auch, dass nicht nur das Leerzeichen Trenner für die Listenelemente ist, sondern auch ";" oder "," verwendet werden können. Das folgende Beispiel zeigt die Kombination von for mit dem im folgenden Abschnitt beschriebenen call-Befehl:

@ECHO OFF
REM Gibt die Zahlen 00 - 99 aus
REM Diese Datei muss count.bat heißen

if "%1" == ""       goto outer
if "%1" == "output" goto output
if "%1" == "inner"  goto inner
goto exit

:inner
for %%i IN (0 1 2 3 4 5 6 7 8 9) do call count output %2 %%i
goto exit

:outer
for %%i IN (0 1 2 3 4 5 6 7 8 9) do call count inner %%i
goto exit

:output
echo %2%3

:exit
call

Aufruf und Ausführen einer anderen Batchdatei. Nach deren Abarbeitung wird in der auf den call_Befehl folgenden Zeile fortgefahren. In einer Batch-Datei lassen sich nicht nur ausführbare Programme aufrufen, sondern auch andere Batch-Dateien. Verwendet man nur den Namen einer Batch-Datei als Kommando, wird die Ausführung in der aufgerufenen Batch-Datei fortgesetzt, aber nicht zur ursprünglichen Batch-Datei zurückgekehrt. Erst mit dem call-Befehl wird eine Batch-Date wie ein ausführbaren Programm behandelt. Es gilt demnach:

Sollen vom aufgerufenen Batch-Job Werte zurückgegeben werden, sind dafür Umgebungsvariable zu verwenden. Der zuletzt von einem Programm erzeugte Return-Code kann noch nach der Rückkehr zum aufrufenden Batch-Job per ERRORLEVEL abgefragt werden. Die Batch-Datei selbst erzeugt keinen Return-Code.

Das start-Kommando

Startet ein Programm in einem neuen eigenen Windows-Fenster. Auf diese Weise kann man aus der Batch-Datei heraus auch Windows-Anwendungen starten. Die Syntax des Kommandos lautet:

START "Titel" /D <Startverzeichnis> <Optionen> Programm

Folgende (optionale) Optionen sind möglich:

Beispiel: Windows öffnet ein neues Fenstern mit Eingabeaufforderung:

start "Ich bin das neue Fensters" /WAIT /NORMAL cmd.exe

Es gilt dabei: /WAIT = Wartet bis Anwendung geschlossen wird, /NORMAL = Startet Anwendung in der NORMAL-Prioritätsklasse. Man kann aber auch den Browser starten und in der Batch-Datei weitermachen:

start "Ich bin das neue Fensters" /D C:\temp /NORMAL firefox.exe

Im Prinzip kann man das mit jedem Programm machen. Ebenso lassen sich beliebige Parameter übergeben. Nützliche (System)-Programme für Batch-Abläufe sind u. a.:

regedit.exe = Registrierungseditor
explorer.exe = Windows Ordner Explorer
taskmgr.exe = Windows Taskmanager
taskeng.exe = Aufgabenplanungsmodul
calc.exe = Taschenrechner
firefox.exe = Firefox-Internetbrowser
notepad.exe = Standard-Textbearbeitungsprogramm
cmd.exe = Kommandointerpreter für Batch


Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: