Batchdateien programmieren - HPK

Transcrição

Batchdateien programmieren - HPK
Batchprogramme
für
DOS und WINDOWS
Autor: Dipl. Ing (FH) Kiermaier
CALL TEIL2
FOR %%A IN (*.TXT)
SHIFT
IF EXIST TEMP.TXT
GOTO ENDE
CHOICE /C:JN
DIR > TEMP.$$$
VOL ¦ FIND "A"
@ECHO OFF
Erschienen im Selbstverlag 1995. Kopieren ist auch ausschnittsweise nur nach Absprache mit dem Autor erlaubt!
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
Inhaltsverzeichnis:
1. Was sind Batch-Programme? ............................................................................................ 3
2. Wichtige Grundeinstellungen............................................................................................ 3
2.1. Einstellungen in der Datei CONFIG.SYS.......................................................... 3
2.2. Einstellungen in der Datei AUTOEXEC.BAT................................................... 4
3. Texte eingeben und editieren ............................................................................................ 6
3.1. Das Programm EDIT.......................................................................................... 6
3.2. Trick 17: COPY CON Datei............................................................................... 7
4. Filter und Ein-/Ausgabeumleitungen ................................................................................ 7
4.1. Filter-Kommandos (Pipelines) ........................................................................... 8
4.2. Dateiumleitungen ............................................................................................... 8
5. BATCH-Dateien unter der Lupe ....................................................................................... 9
5.1. Aufruf und Übergabeparameter.......................................................................... 9
5.2. Befehle für Stapeldateien ................................................................................... 10
CALL Batchdatei.......................................................................................... 10
CHOICE Text /C:Liste /T:Zeichen,Sekunden........................................... 10
ECHO ON|OFF ............................................................................................ 10
FOR %Variable IN (Liste) DO Kommando............................................. 11
GOTO Marke................................................................................................ 11
IF ERRORLEVEL Nummer Kommando.................................................. 11
PAUSE........................................................................................................... 12
REM............................................................................................................... 12
SHIFT ............................................................................................................ 12
6. Beispielanwendungen........................................................................................................ 13
6.1. Automatische Beantwortung von Abfragen ....................................................... 13
6.2. Auswahlmenüs und Eingabehilfen ..................................................................... 15
6.2.1. Grundlegendes zur Menüerstellung..................................................... 15
6.2.2. Farbige Menüs ..................................................................................... 16
6.2.3. Mit Signalton den Anwender aufmerksam machen ............................ 17
6.2.4. Fenstertechnik mit direkter Cursorpositionierung............................... 17
6.3. Finden von Dateien und Verzeichnissen ............................................................ 19
6.4. Automatische Installationsroutinen.................................................................... 21
6.4.1. Installationslaufwerk und Verzeichnisse prüfen ................................. 21
6.4.2. Automatische Installation mehrerer Disketten .................................... 22
6.4.3. Erweitern der AUTOEXEC.BAT und CONFIG.SYS......................... 23
6.4.4. Automatischer Neustart des Rechners................................................ 24
6.5. Datum und Uhrzeit abfragen: ein Terminkalender............................................. 25
6.6. Diverses .............................................................................................................. 26
6.6.1. Temporärverzeichnis automatisch löschen.......................................... 26
6.6.2. Zweite Konfiguration für Spiele.......................................................... 27
6.6.3. DOS-Befehle erweitern und entschärfen............................................. 27
7. ANHANG A: Die ANSI-Sequenzen................................................................................. 29
7.1. Cursor- und Bildschirmsteuerung ...................................................................... 29
7.2. Tasten umbelegen............................................................................................... 30
8. ANHANG B: Das Programm DOSKEY........................................................................... 31
8.1. Eingeben mehrerer Befehle in einer Zeile.......................................................... 32
8.2. Erstellen eigener Befehle (Makros).................................................................... 32
9. ANHANG C: Das DEBUG-Dienstprogramm .................................................................. 33
10. ANHANG D: Lösungen zu den Aufgaben ..................................................................... 35
2
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
3
1. Was sind Batch-Programme?
Der Ausdruck BATCH bedeutet soviel wie 'Stoß' und wird im Zusammenhang mit Computern
oft als Stapelverarbeitung interpretiert. Der Ausdruck 'Stapel' trifft auch ziemlich genau die
Aufbau eines BATCHES. Es handelt sich nämlich um die Aneinanderreihung mehrerer einzelner
DOS-Befehle, die nach dem Aufruf des Batchprogramms alle nacheinander abgearbeitet werden.
Ein BATCH spart also immer viele Tastatureingaben und hilft so Zeit bei der Erledigung von
EDV-Aufgaben zu sparen. Da Batchprogramme ausführbare Dateien sind, müssen sie, ähnlich
wie COM- und EXE-Dateien, eine bestimmte Endung besitzen. Es ist naheliegend, daß diese
Endung aus den drei Buchstaben 'BAT' besteht. Bekanntestes Beispiel für eine Batch-Datei ist
die AUTOEXEC.BAT.
2. Wichtige Grundeinstellungen
Nachdem der Computer den POST (Power On Self Test) ausgeführt hat, wird von der Systemdiskette (Laufwerk A: oder aktive Partition der Festplatte) ein sogenanntes BOOT-Programm
geladen und gestartet. Dieses BOOT-Programm lädt dann die Dateien IO.SYS und MSDOS.SYS
sowie den Kommandointerpreter COMMAND.COM. Letztgenanntes Programm wird gestartet
und lädt seinerseits die Konfigurationsdatei CONFIG.SYS und die Stapeldatei AUTOEXEC.BAT.
2.1. Einstellungen in der Datei CONFIG.SYS
In der Datei CONFIG.SYS werden alle vorhandenen Geräte und Schnittstellen für ihren Gebrauch eingestellt. Demgemäß stehen in dieser Datei viele wichtige Befehle, die das System
überhaupt erst funktionsfähig machen oder sogar optimieren. Einige wichtige Befehle, die das
Arbeiten mit Batchprogrammen erleichtern und verschönern, sollen hier aufgeführt werden.
DEVICE = Gerätetreiber
Damit wird ein Gerätetreiber installiert, also ein Programm, das sich um die Kommunikation
zwischen einer Hardwarekomponente und dem Betriebssystem kümmert. Da es im
Hauptspeicher abgelegt wird, steht es somit ständig zur Verfügung, verkleinert aber den
Arbeitsspeicher! Mit DEVICE sollte folgender Treiber/Programme installiert werden:
ANSI.SYS
Steuersequenzen für Bildschirm- und Cursorsteuerung einrichten. Ist dieser Treiber installiert
kann man zum Beispiel die Farben und die Position für Bildschirmanzeigen ändern oder
bestimmten Tasten ganze Befehlsgruppen zuordnen (siehe ANSI-Sequenzen im Anhang A).
Beispiel:
DEVICE = C:\DOS\ANSI.SYS
DEVICEHIGH = Gerätetreiber
Im Prinzip bewirkt dieser Befehl dasselbe wie DEVICE. Aber dabei wird versucht, den Gerätetreiber in den UPPER MEMORY zu schreiben, was Hauptspeicher spart. Voraussetzung dafür
ist, daß EMM386.EXE installiert ist und der Befehl DOS=UMB vorausgeht. Andernfalls, oder
falls kein Platz mehr zur Verfügung steht, wird der Gerätetreiber ganz normal im Hauptspeicher
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
4
eingerichtet. Wieviel Platz im UPPER MEMORY zur Verfügung steht kann mit dem MEMBefehl untersucht werden, z.B: MEM /F.
HIMEM.SYS, EMM386.EXE und SMARTDRV.EXE dürfen nicht mit DEVICEHIGH
installiert werden!
Beispiel:
DEVICEHIGH = C:\DOS\RAMDRIVE.SYS 1500 /E
SHELL
Der Befehl SHELL installiert den Befehlsinterpreter, mit dem DOS arbeiten soll. In der Regel ist
das das Programm COMMAND.COM. Prinzipiell ist es aber jederzeit möglich mit anderen
Interpretern (Benutzeroberflächen) zu arbeiten, beispielsweise von 4DOS™. Wenn der Befehl in
der CONFIG.SYS nicht angegeben wird, sucht DOS die Datei COMMAND.COM im Hauptverzeichnis (weil beim Start aktuell). Der Befehl ist außerdem wichtig, wenn mehr Umgebungsspeicher (Environment) eingerichtet werden soll. In diesem Speicher werden alle Variablen und
DOS-Einstellungen gespeichert. Er kann an der Eingabeaufforderung mit dem Befehl SET
eingesehen werden. Folgendes Beispiel richtet die COMMAND.COM mit 1024 Byte für den
Environment-speicher ein.
Beispiel:
SHELL = C:\COMMAND.COM /e:1024 /p
2.2. Einstellungen in der Datei AUTOEXEC.BAT
Die Batch-Datei AUTOEXEC.BAT hat eigentlich nur die Aufgabe Grundeinstellungen für Anwenderprogramme vorzunehmen, sowie diese Programme automatisch zu starten. Dazu kann
man beliebige Variablen setzen und später wieder abfragen. Dazu gehören beispielsweise die
Variable TEMP, DIRCMD und WINDIR. Es ist auch möglich, von einer Batchdatei andere
Batchprogramme aufzurufen, um zum Beispiel Installationen zu erleichtern. Für die
Batchprogrammierung ist es meist praktisch, die nachfolgend genannten Befehle mit in die
AUTOEXEC.BAT aufzunehmen.
PATH Verzeichnisnamen
PATH legt fest, in welchen Verzeichnissen DOS nachsehen soll, um eine ausführbare Datei
(also nur COM, EXE und BAT) zu finden. Die Verzeichnisse werden in der angegebenen
Reihenfolge durchsucht. Deshalb sollte das Verzeichnis, in dem am häufigsten gesucht wird, als
erste Angabe hinter PATH stehen und weniger benutzte Verzeichnisse entfernt werden.
Beispiel: PATH C:\DOS;D:\WINDOWS;F:\
SET Variable=Wert
Dieser Befehl kann eine Variable des Umgebungsspeichers mit einem Wert belegen. Später kann
jedes Programm diese Werte abfragen und so auf gewünschte Art und Weise reagieren.
Zwischen dem Variablennamen und dem Gleichheitszeichen '=' sowie dem Veriablenwert sollte
kein Leerzeichen stehen! Um Variablen wieder aus dem Umgebungsspeicher zu löschen, genügt
es hinter dem Gleichheitszeichen nichts anzugeben. Folgende Variablen werden oft in der
AUTOEXEC.BAT belegt:
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
5
SET COMSPEC = c:\command.com
SET DIRCMD = /p/o:n
SET TEMP = E:\
SET TEMP =
PROMPT
setzt bei Diskettenstart den Kommandointerpreter auf
Laufwerk C: fest (dadurch entfällt das ständige
Diskettenwechseln)
bedeutet, daß das Inhaltsverzeichnis nach Namen geordnet und
seitenweise ausgegeben wird.
legt fest, daß temporäre Dateien auf E: (z.B. RAM-Laufwerk)
abgelegt werden sollen (Geschwindigkeit!)
dies würde die oben mit E:\ geladene Variable wieder löschen.
Text Parameter
Der Befehl stellt ein, was als Eingabeaufforderungszeichen erscheinen soll. Dazu gibt es eine
Reihe von Parametern, welche mit einen führenden Dollarzeichen angegeben werden können.
Üblich sind dabei die beiden Werte $p$g, um den aktuellen Pfad und das Größerzeichen
auszugeben. Andere Parameter sind:
$p
$g
$v
$q
Akt. Laufwerk und Verzeichnis
Größerzeichen (">")
DOS-Versionsnummer
Gleichheitszeichen ("=")
$t
$d
$_
$e
aktuelle Uhrzeit
aktuelles Datum
neue Zeile
Escapezeichen
Sequenz
für
ANSI-
Folgendes Beispiel gibt in jeweils einer Zeile die Uhrzeit, das Datum und den aktuellen Pfad aus.
Geben Sie ein:
PROMPT Uhrzeit: $t$_Datum: $d$_$p$g ↵
Mithilfe der ANSI-Sequenzen können auch farbige Ausgaben erfolgen oder die Ausgabeposition
frei gewählt werden (ANSI.SYS muß geladen sein). Dazu muß die Zeichenfolge $e[ benutzt
werden. Dahinter steht einer der ANSI-Befehle (siehe ANSI-Sequenzen). Um farbige Ausgaben
in Batchdateien zu erzeugen muß allerdings eine andere Form für die ANSI-Sequenz gewählt
werden (STRG+P - ESC - [).
DOSKEY
Dieses DOS-Programm 'merkt' sich nach dem Aufruf alle eingegebenen Befehle und läßt sie auf
Tastendruck wieder erscheinen. So spart man sich bei ähnlichen Eingaben ständig alles neu zu
tippen. In der AUTOEXEC.BAT muß dazu nur in einer eigenen Zeile stehen:
C:\DOS\DOSKEY oder
C:\DOS\DOSKEY /INSERT
Der Parameter /INSERT bedeutet, daß DOSKEY im Einfügemodus gestartet wird und so in alte
Befehle neue Zeichen eingefügt werden können. Andernfalls werden bei der Eingabe von neuen
Zeichen die alten überschrieben.
Falls dieser Befehl nicht in der AUTOEXEC.BAT steht, kann man ihn selbstverständlich auch
nachträglich von Hand eingeben.
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
6
3. Texte eingeben und editieren
Eine der häufigsten Aufgaben unter MS-DOS war und ist es, Texte zu schreiben und zu bearbeiten. Sei es nun für Briefe oder eigene Programme, wie die BATCH-Dateien. Bis MS-DOS
Version 4.x war es dazu nötig, ein eigenes Textverarbeitungsprogramm zu laden oder sich mit
dem Programm EDLIN zu begnügen. Seit MS-DOS 5.0 wird jedoch ein komfortabler Editor
namens EDIT zum Betriebsystem mitgeliefert.
3.1. Das Programm EDIT
Das Programm EDIT ist ein sehr bequemes, mausgesteuertes Textverarbeitungsprogramm. Zum
Aufruf gibt man den Befehl EDIT und dahinter die zu bearbeitende Datei ein. Startet man das
Programm nur durch die Eingabe von EDIT, wird man als erstes in einem Fenster aufgefordert,
einen Dateinamen anzugeben. In beiden Fällen erscheint daraufhin eine meist blaue Oberfläche
und die gewünschte Textdatei. Sie kann dann beliebig mit den Cursortasten (= Pfeiltasten) oder
der Maus editiert werden.
Am oberen Bildschirmrand stehen einige Menüs zur Verfügung, die weitere Befehle für den Editor enthalten. Sie können mit durch Anklicken mit dem Mauszeiger oder der ALT-Taste geöffnet
werden (Pull-Down-Menü). Das wichtigeste davon ist das Hilfe-Menü, in dem alle wichtigen
Schritte und Vorgänge genau erklärt werden.
Um eine kleine Textdatei neu zu erstellen, gehen Sie so vor:
Geben Sie ein:
EDIT TEST.TXT ↵
Schreiben Sie einen beliebigen kleinen Text
Markieren Sie eine beliebige Stelle des Textes:
Setzen Sie den Cursor auf das erste zu markierende Zeichen, drücken Sie dann mehrmals
die Taste NACH-RECHTS und halten dabei die Umschalttaste gedrückt, bis Sie das letzte
Zeichen erreicht haben.
Setzen Sie den Mauszeiger auf das erste zu markierende Zeichen und drücken die linke
Maustaste. Halten Sie die Taste gedrückt während Sie den Mauszeiger bis zum letzen Zeichen weiterführen.
Um Auschnitte aus diesem Text zu suchen, zu kopieren oder zu löschen, wird der Menüpunkt
BEARBEITEN geöffnet. Darin sind die wichtigsten Editierfunktionen enthalten.
Drücken Sie die ALT-Taste, wählen Sie mit den Tasten NACH-RECHTS oder NACHLINKS den Menüpunkt BEARBEITEN aus und drücken dann die NACH-UNTEN-Taste
Zeigen Sie mit der Maus auf den Menüpunkt BEARBEITEN und drücken Sie dann einmal
die linke Maustaste
Wählen Sie mit der NACH-UNTEN-Taste den Punkt KOPIEREN und drücken dann die
Eingabetaste.
Zeigen Sie mit der Maus auf den Punkt KOPIEREN und drücken Sie dann einmal die linke
Maustaste
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
7
Der markierte Text ist nun in einen internen Speicherpuffer kopiert worden. Um ihn wieder zu
holen, geht man so vor:
Wählen Sie eine beliebige andere Stelle im Text mit den Cursortasten
Zeigen Sie mit der Maus auf eine beliebige andere Stelle im Text und drücken Sie dann
einmal die linke Maustaste
Öffnen Sie erneut den Menüpunkt BEARBEITEN und wählen den Punkt EINFÜGEN. Abschließend drücken Sie die Eingabetaste
Öffnen Sie erneut den Menüpunkt BEARBEITEN und klicken Sie einmal mit der linken
Maustaste auf den Punkt EINFÜGEN
Um den Text zu drucken, zu speichern oder den Editor zu beenden, müssen Sie den Menüpunkt
DATEI öffnen. Wenn Sie den Punkt BEENDEN auswählen ohne gespeichert zu haben, fragt Sie
der EDITOR automatisch, ob er die Datei sichern soll.
Öffnen Sie erneut den Menüpunkt DATEI und wählen den Punkt BEENDEN. Da die Datei
nicht gespeichert werden soll, wählen Sie durch Drücken der TABULATOR-Taste die
Schaltfläche NEIN und drücken abschließend die Eingabetaste
Öffnen Sie erneut den Menüpunkt DATEI und klicken Sie einmal mit der linken Maustaste
auf den Punkt BEENDEN. Klicken Sie abschließend einmal auf die Schaltfläche NEIN,
um die Datei nicht zu speichern.
)
Das Programm EDIT ist ein komfortables mausgesteuertes, bildschirmorientiertes
Textverarbeitungsprogramm.
3.2. Trick 17: COPY CON Datei
Falls Sie schnell mal nur eine kleine Batchdatei erstellen wollen, müssen Sie deshalb nicht gleich
einen Editor starten. Eleganter und schneller geht das meist mit dem Kopierbefehl. Allerdings
kann dabei der Text nicht editiert oder verbessert werden. Deshalb eignet sich das Verfahren nur
für kurze oder einzeilige Texte.
Geben Sie ein:
COPY CON TEST.BAT ↵
Geben Sie die gewünschten Befehle ein
Drücken Sie abschließend die Taste F6 oder STRG-Z um ein Dateiende-Zeichen zu
erhalten
und abschließend die Eingabetaste
Anstatt von der Konsole direkt in eine Datei zu schreiben, können Sie natürlich auch direkt auf
den Drucker schreiben. Sie müssen dazu nur als Ziel den Drucker auswählen: COPY CON
PRN.
4. Filter und Ein-/Ausgabeumleitungen
Oft ist es sinnvoll Dateien nicht so wie sie sind auf den Bildschirm auszugeben, sondern sie erst
alphabetisch zu sortieren oder nur seitenweise auszugeben. Dafür stellt MS-DOS sogenannte
Filterprogramme zur Verfügung.
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
8
4.1. Filter-Kommandos (Pipelines)
Ein Filter ist ein Programm, durch das eine Datei geschickt und dadurch verändert wieder ausgegeben wird. Alle Filterprogramme werden durch das PIPE-Zeichen "¦" (Strich mit Durchschuß)
mit einem entsprechenden Ausgabebefehl verknüpft. MS-DOS stellt dazu drei Filterprogramme
zur Verfügung:
Der FIND-Filter durchsucht Dateien nach einem bestimmten Textabschnitt. Dabei wird im angegebenen Suchtext zwischen Groß- und Kleinschreibung unterschieden (Ausnahme: Option /i dahinter angeben). Wenn der Filter die angegebene Zeichenfolge findet, gibt er die betreffende
Zeile aus.
Geben Sie ein:
TYPE AUTOEXEC.BAT ¦ FIND "path" /i ↵
Der MORE-Filter ermöglicht es, eine Ausgabe nach jeweils 24 Zeilen anzuhalten. Es wird dann
die Meldung '-- Fortsetzung --' ausgegeben und auf einen Tastendruck gewartet.
Geben Sie ein:
TREE C:\ ¦ MORE ↵
Der SORT-Filter schließlich sortiert eine Ausgabe alphabetisch nach den jeweils ersten Zeichen
jeder Zeile und gibt sie so wieder aus.
Geben Sie ein:
DIR C:\DOS\*.* ¦ SORT ↵
Letzte Anzeige war bestimmt zu schnell vorbei. Deshalb können Filter miteinander kombiniert
werden.
Geben Sie ein:
DIR C:\DOS\*.* ¦ SORT ¦ MORE ↵
4.2. Dateiumleitungen
Neben der Möglichkeit eine Datei zu filtern kann sie bei der Ausgabe auch auf eine andere Datei
umgeleitet werden. Das heißt, daß das Ergebnis eines Filtervorgangs oder auch nur die Datei
selbst in eine andere Datei geschrieben (kopiert) wird. Dateiumleitungen werden durch das Größer- und Kleinerzeichen vorgenommen. So kann zum Beispiel ein Inhaltsverzeichnis in eine
Datei geschrieben (umgeleitet) werden:
Geben Sie ein:
DIR C:\DOS\*.* > TEST1.DIR ↵
Um dieses Verzeichnis auch noch sortiert in die Datei zu kopieren, kann der Befehl mit dem
Filter SORT kombiniert werden.
Geben Sie ein:
DIR C:\DOS\*.* ¦ SORT > TEST1.DIR ↵
Die alte Datei TEST1.DIR wird dabei automatisch überschrieben. Soll in der Datei nur ein zusätzliches Verzeichnis angehängt werden, ohne die alte Datei zu überschreiben, so muß das
Grösserzeichen doppelt angegeben werden.
Kiermaier ©1995
Geben Sie ein:
Batchprogramme für DOS und WINDOWS
9
DIR C:\*.* ¦ SORT >> TEST1.DIR ↵
Anstatt das Pipesymbol "¦" zu benutzen, kann das Inhaltsverzeichnis auch zuerst auf das
Filterprogramm und dann auf die Datei ausgegeben werden. Folgendes Beispiel schreibt alle
Unterverzeichnisse von C:\ alphabetisch sortiert in die Datei TEST3.DIR.
Geben Sie ein:
SORT < DIR C:\*. > TEST3.DIR ↵
Da DOS auch Ein-/Ausgabegeräte wie Dateien behandelt, kann auch beispielsweise eine
Ausgabe auf den Drucker erfolgen. Dazu muß lediglich hinter dem Befehl das Größerzeichen
und dahinter die Zeichenfolge PRN bzw. LPT1 geschrieben werden.
Geben Sie ein:
TYPE C:\AUTOEXEC.BAT > PRN ↵
Dadurch ist wieder ein Trick möglich, ähnlich wie mit COPY CON ... Textdateien zu erstellen.
Es wird dazu lediglich der TYPE-Befehl benutzt. Als Eingabe wird die Tastatur CON und als
Ausgabedatei ein beliebiger Dateiname angegeben. Beendet wird das Ganze wieder durch
Drücken der F6-Taste und anschließend der Eingabetaste.
Geben Sie ein:
TYPE CON > TEST.TXT ↵
Schließen Sie durch Drücken der F6-Taste und abschließend ↵
Wenn Sie die Meldungen eines Befehls nicht sehen wollen, können Sie die Bildschirmausgabe
nach nirgendwo umleiten. Dazu geben Sie als Gerät NUL hinter dem Größerzeichen an.
Geben Sie ein:
COPY C:\AUTOEXEC.BAT C:\DOS >NUL ↵
5. BATCH-Dateien unter der Lupe
Nach dem Bearbeiten der CONFIG.SYS wird die Stapeldatei AUTOEXEC.BAT geladen und
ausgeführt. Sie kann leicht mit einem Editor geändert und beliebig mit nachfolgenden Befehlen
erweitert werden. Interessanterweise kann man in diesen BATCH-Dateien jederzeit andere
Programme aufrufen und so nacheinander ausführen lassen.
5.1. Aufruf und Übergabeparameter
Batchdateien werden wie andere Programme (mit den Endungen COM und EXE) durch Eingabe
ihres Names aufgerufen und gestartet. Dabei können ihnen Werte übergeben werden, die als Parameter bezeichnet werden. Diese Parameter können dann von der Batchdatei ausgewertet und in
die Befehle mitintegriert werden. Dazu werden die übergebenen Werte der Reihe nach in einer
der Variablen %1 bis %9 gespeichert. Sind es mehr als 10 Werte, stehen in Parameter %9 alle
restlichen. Sie können dort mit dem SHIFT-Befehl erreicht werden. In Parameter %0 steht beim
Start der Name der aufgerufenen Batchdatei.
Folgende kleine Batchdatei mit dem Namen D.BAT gibt das angegebene Inhaltsverzeichnis und
alle Unterverzeichnisse alphabetisch sortiert aus. Schreiben Sie es beispielsweise mit dem DOS
Editor durch Eingabe von EDIT D.BAT .
Kiermaier ©1995
Beispiel:
Batchprogramme für DOS und WINDOWS
10
@echo off
dir %1 /o:n /s /p
Der Aufruf der kleinen Batchdatei erfolgt durch Eingabe von D und der Eingabetaste, wenn das
aktuelle Inhaltsverzeichnis ausgegeben werden soll. Dabei wird kein Parameter übergeben, %1
ist dann leer. Sollen aber nur bestimmte Dateien oder ein anderes Verzeichnis angezeigt werden,
so erfolgt der Aufruf zum Beispiel durch D \DOS oder D *.COM, usw.
5.2. Befehle für Stapeldateien
CALL Batchdatei
Soll aus einer Batchdatei eine weitere aufgerufen und später wieder zurückgekehrt werden, so
kann dieser Befehl verwendet werden. So kann man sehr komplexe Programme schreiben. Folgendes Beispiel könnte in der AUTOEXEX.BAT stehen und ein BATCH-Datei aufrufen, in der
alle Makrodefinitionen stehen, die mit DOSKEY definiert worden sind.
Beispiel:
CALL MAKRO.BAT
CHOICE Text /C:Liste /T:Zeichen,Sekunden
Ab der MS-DOS Version 6.2 kann man mit diesem Befehl in Stapeldateien Eingaben machen.
Als Parameter muß lediglich eine Liste der Zeichen angegeben werden, die für eine Eingabe
erlaubt sind. DOS setzt diese Zeichen dann beim Ausführen in eckige Klammern und wartet auf
eine korrekte Eingabe. Falsche Tasten werden mit einem Klingelzeichen quittiert. Als Ergebnis
wird ein Fehlercode (ERRORLEVEL) zurückgeliefert, dessen Wert der Stelle des Zeichens in
der Liste entspricht.
Folgendes Beispiel gibt auf dem Bildschirm den Text 'Programm beenden [J,N]?' aus und wartet
auf eine Eingabe. Wurde j oder J gedrückt, ist der ERRORLEVEL 1, im anderen Fall für n oder
N gleich 2.
Beispiel:
CHOICE Programm beeenden /C:JN
ECHO ON|OFF
Schaltet die Bildschirmausgabe des momentanen Befehls vor seiner Bearbeitung ein oder aus.
Durch das Ausschalten wird der Bildaufbau übersichtlicher, vor allem wenn eigene Menüs ausgegeben werden. Das Voranstellen des Zeichens @ bewirkt, daß auch der Befehl ECHO selbst
nicht ausgegeben wird. Dagegen ist der Wert ON nützlich, wenn nach einem Fehler gesucht
wird.
Beispiel:
@ECHO OFF
Folgt der ECHO-Anweisung statt der Parameter ON bzw. OFF ein Text, so wird dieser auf den
Bildschirm ausgegeben (unabhängig davon, ob ECHO OFF ist). Man kann damit also beliebige
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
11
Texte auf dem Bildschirm ausgeben. Will man eine Leerzeile haben, so muß unmittelbar hinter
der ECHO-Anweisung ein Punkt folgen.
Beispiel:
ECHO ***** Auswahlmenü *****
ECHO.
Mit einer Zuweisung können auch Texte auf den Drucker ausgegeben werden. Es muß dann nur
die Zeichenfolge > PRN folgen.
Beispiel:
ECHO Das geht an den Drucker > PRN
FOR %Variable IN (Liste) DO Kommando
Mit FOR können Programmabschnitte mehrmals durchlaufen werden, also sogenannte Schleifen
programmiert werden. Auf diese Weise können mit einem Befehl unterschiedliche Dateien kopiert, gelöscht oder ausgegeben werden.
Als Liste sind Dateinamen anzugeben, wobei Wildcards (* und ?) erlaubt sind. Mehrere
Angaben sind durch je ein Leerzeichen zu trennen. Eine Variable besteht aus einem
Prozentzeichen und einem beliebigen Buchstaben oder Wort (z.B.: %A). In ihr wird die gerade
gefundene Datei gespeichert und kann dann vom auszuführenden Befehl, dem Kommando,
benutzt werden. Als Befehl kann jedes DOS-Kommando benutzt werden. Sind für die
Ausführung des Befehls irgendwelche Übergabewerte erforderlich, so können diese mit der
Variablen übergeben werden.
Der FOR-Befehl kann nicht nur in Batchdateien, sondern auch an der Eingabeaufforderung benutzt werden. Während in Batchdateien die Variable im FOR-Befehl mit zwei Prozentzeichen
definiert wird (z.B.: %%A), genügt an der Eingabeaufforderung nur eines (z.B.: %A).
Beispiel in Batchdateien:
FOR %%A IN (*.TXT *.DOC) DO TYPE %%A
FOR %D IN (*.BAT) DO FIND "PROMPT" %D /i
Geben Sie ein:
↵
GOTO Marke
Es wird ein Sprung zu einer Stelle in der Batchdatei ausgeführt, vor der die Marke steht. Eine
Marke muß alleine am Anfang der Zeile stehen und hat als erstes Zeichen immer einen Doppelpunkt.
Beispiel:
:Schleife
GOTO Schleife
IF ERRORLEVEL Nummer Kommando
IF Text1 = = Text2 Kommando
IF EXIST Dateiname Kommando
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
12
Der IF-Befehl dient zum Prüfen des Wahrheitsgehalts einer Bedingung. Falls die angegebene
Bedingung erfüllt ist, wird der dahinterstehende Befehl ausgeführt, andernfalls übergangen. Jede
Bedingung kann mit dem Schlüsselwort NOT hinter dem IF-Befehl negiert werden. Es sind drei
verschiedene Bedingungen möglich: die Prüfung des ERRORLEVELs, der Vergleich zweier
Zeichenketten und die Existenz einer Datei.
Normalerweise dient der ERRORLEVEL als Möglichkeit auf Fehler von Programmen zu reagieren. In Batchdateien läßt er sich aber auch sehr gut zum Erstellen von Auswahlmenüs verwenden. Dazu muß der Befehl CHOICE vorausgehen, der einen Wert (Nummer) zurückliefert,
der der Stelle des Zeichens in der Liste entspricht. Dahinter folgt das Kommando, welches
ausgeführt wird, wenn die Nummer dem übergebenen Wert entspricht. Meist ist dies ein GOTOBefehl.
Beispiel:
IF ERRORLEVEL 1 GOTO ANFANG
Um zu überprüfen, ob der Batchdatei ein sogenannter Parameter (Werte in den Variablen %1 bis
%9) übergeben wurden, kann der Zeichenvergleich dienen. Zu beachten ist, das das Gleichheitszeichen dazwischen doppelt angegeben werden muß.
Beispiel:
IF NOT "%1" = = "" TYPE %1
Will man wissen, ob eine Datei bereits existiert, bevor man sie lädt, löscht oder anderweitig
manipuliert, benutzt man die dritte Möglichkeit. Die angegebene Befehl wird nur dann
ausgeführt, wenn die Datei tatsächlich da ist. Der Dateiname kann natürlich auch in einem
Parameter (%1 bis %9) stehen.
Beispiel:
IF EXIST TEXT.BAK DEL TEXT.BAK
PAUSE
Unterbricht die Ausführung einer Stapeldatei und fordert den Benutzer auf, zur Fortsetzung eine
Taste zu drücken. Dazu wird die Meldung 'Eine beliebige Taste drücken, um fortzusetzen' auf
den Bildschirm ausgegeben. Praktisch ist dieser Befehl, wenn vorher mit ECHO ein Text
ausgegeben wird, der zum Beispiel zum Wechseln der Diskette auffordert.
Beispiel:
ECHO Wechseln Sie die Diskette in Laufwerk A:
PAUSE
REM
Will man in Batchdateien einen Kommentar einfügen, um beispielsweise einen Befehl zu
erklären, muß die REM-Anweisung am Anfang der Zeile stehen. Alles was hinter diesem Befehl
steht, wird von DOS nicht beachtet. Man kann mit REM auch beliebige Befehle in Batchdateien
vorübergehend ausschalten, indem man REM davor schreibt.
Beispiel:
SHIFT
REM Dies ist ein Kommentar in Batchdateien
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
13
Die Übergabeparameter %0 bis %9 können mit diesem Befehl beeinflußt werden. Dabei wird
Parameter %1 nach %0, %2 nach %1, usw. kopiert. Es wird auf diese Art möglich, mehr als 9
Parameter auszuwerten oder mit einer kurzen Befehlsfolge in einer Schleife alle mit Parameter
übergebenen Werte nacheinander zu bearbeiten. Nennen Sie das folgende Beispiel
KOPIER.BAT und tippen Sie es mit einem Editor ab.
Beispiel:
@echo off
rem Syntax:
KOPIER Zielpfad
set ziel=%1
:schleife
shift
if "%1"= ="" goto ende
copy %1 %ziel%
>nil
goto schleife
:ende
set ziel=
echo Fertig!
Datei1
Datei2
Datei3
...
6. Beispielanwendungen
Im nun folgenden Übungsteil sollen die Befehle und neu erworbenen Kenntnisse in die Tat
umgesetzt und einige Anregung für eigene Ideen geliefert werden. Um die Beispiele Schritt für
Schritt auszuprobieren, kann jede Batchdatei mit einem besonderen Kommando gestartet werden
(ab MS-DOS 6.0):
Einzelschrittbearbeitung:
COMMAND /Y /C Batchname
6.1. Automatische Beantwortung von Abfragen
Wenn Sie schon einmal versucht haben, ein ganzes Verzeichnis mit DEL *.* zu löschen, dann
haben Sie auch die Sicherheitsabfrage 'Alle Dateien *.* im Verzeichnis löschen (J/N)' gesehen.
Sie müssen erst mit 'J' antworten, bevor die Dateien gelöscht werden. Ähnliches gilt auch, wenn
Sie mit dem Befehl DELTREE ein ganzes Verzeichnis auf einmal löschen wollen oder wenn Sie
ein Diskette formatieren wollen. Selbstverständlich hat dies seinen Sinn, aber in der Regel weiß
man ja was man macht und dann sind diese Fragen lästig und zeitraubend.
Um nun diese Abfragen automatisch zu beantworten, benutzt man den ECHO-Befehl und verknüpft ihn mit der Anwendung über das Pipesymbol. Folgende Beispiele funktionieren sowohl
in Batchdateien als auch direkt an der Eingabeaufforderung.
Geben Sie ein:
time ↵
Nach der Anzeige werden Sie aufgefordert, eine neue Uhrzeit einzugeben oder die Eingabetaste
zu drücken.
Geben Sie ein:
echo. ¦ time ↵
Als Ergebnis wird die Uhrzeit ausgegeben, ohne auf die Eingabe der neuen Zeit zu warten.
Natürlich könnten Sie auch gleich eine neue Uhrzeit eingeben:
Kiermaier ©1995
Geben Sie ein:
Batchprogramme für DOS und WINDOWS
14
echo 19.30.00 ¦ time ↵
Da die weiteren Beispiele nicht so ohne weiteres ausprobiert werden können, muß zuerst eine
kleine Vorbereitung getroffen werden:
Geben Sie ein:
Geben Sie ein:
md \temp ↵
xcopy c:\dos\*.txt c:\temp\ ↵
Nun haben wir ein Verzeichnis mit überflüssigen Dateien, die gelöscht werden müssen. Jetzt
schreiben wir folgende kleine Batchdatei:
Geben Sie ein:
edit c:\lösche.bat
↵
@echo off
rem Syntax I: lösche(löscht im aktuellen Verzeichnis alle Dateien)
rem Syntax II: lösche Verzeichnisname
(löscht Verzeichnis)
if
%1?= =? goto aktpfad
cd %1
echo J ¦ del *.*
cd ..
rd %1
goto ende
:aktpfad
echo J ¦ del *.*
:ende
Nach dem Speichern und Beenden des Editors können Sie nun auch ohne DELTREE (z.B. mit
MS-DOS 5.0 oder darunter) das ganze Verzeichnis oder, wie hier, Teile aus dem Verzeichnis löschen. Falls Sie nicht im Hauptverzeichnis sind, sollten Sie nun zuerst in das übergeordnete Verzeichnis wechseln.
Geben Sie ein:
Geben Sie ein:
cd \ ↵
lösche \temp
↵
Schreiben Sie nun eine kleine Batchdatei mit dem Namen 'FORM!.BAT', die eine Diskette
in Laufwerk A: oder B: sofort formatiert, ohne auf eine weitere Eingabe zu warten! Erweitern Sie die Datei vor einem Test so, daß es nicht möglich ist, die Festplatte zu
formatieren! (Lösung 1 im Anhang D)
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
15
6.2. Auswahlmenüs und Eingabehilfen
Wer mehrere Spiele oder häufig benötigte Programme auf der Festplatte installiert hat, kennt das
Problem, ein entsprechendes Programm schnell zu finden. Ist man in das entsprechende Verzeichnis gewechselt, muß unter Umständen noch eine bestimmte Syntax beim Aufruf
eingehalten werden. Dies hat man entweder alles im Kopf oder man schreibt sich ein kleines
Menü, in dem man einfach nur auswählt, was gestartet werden soll.
6.2.1. Grundlegendes zur Menüerstellung
Ursprünglich (DOS 5.0 und darunter) sah das so aus, daß man das Menü als Text mit dem Echobefehl ausgab und dann lauter kleine Batchdateien mit den Namen 1.BAT, 2.BAT, usw. hatte.
Seit DOS 6.0 gibt es den Befehl CHOICE der flexible Eingaben für Batchdateien erlaubt. Sollten
Sie noch nicht über diese Version verfügen, können Sie mit dem Programm DEBUG selbst eine
ähnliche Datei erstellen (näheres im Anhang C).
Der Befehl CHOICE liefert nach einem Tastendruck einen Fehlercode zurück. Dieser ERRORLEVEL kann mit dem IF-Befehl verarbeitet werden. Wollen Sie also ein Menü mit drei
Auswahlpunkten erzeugen, könnte das so aussehen:
@echo off
cls
echo 1 = Erster Menüpunkt
echo 2 = Zweiter Menüpunkt
echo 3 = Dritter Menüpunkt
echo E = Ende
choice Bitte wählen: /C:123E
CHOICE gibt dann nach dem Menü den Text "Bitte wählen [1,2,3,E]" aus und wartet auf die
Eingabe eines der angegebenen Zeichen. In der Reihenfolge der Zeichen "1", "2", "3" und "E"
liefert es dann den Fehlercode zurück. Für das Zeichen "1" erhält man den Kode 1, für "2" den
Kode 2, für "3" den Kode 3 und für "E" den Kode 4. Die nachfolgende Abfrage mit dem IFBefehl muß nun beginnend bei 4 absteigend alle Menüpunkte behandeln. Das würde dann zum
Beispiel so aussehen:
if
if
if
if
errorlevel
errorlevel
errorlevel
errorlevel
:punkt1
echo punkt1
goto ende
:punkt2
echo punkt2
goto ende
:punkt3
echo punkt3
goto ende
:ende
4
3
2
1
goto
goto
goto
goto
ende
punkt3
punkt2
punkt1
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
16
Eventuell kann es von Vorteil sein, einen Menüpunkt automatisch (default) auszuwählen, wenn
der Benutzer innerhalb einer bestimmten Zeit nicht reagiert. Auch das ermöglicht der CHOICEBefehl. Hängen Sie dazu an den oben gezeigten CHOICE-Befehl nur den Parameter "/T:1,5" an.
Dies bedeutet, daß der Menüpunkt "1" nach max. 5 Sekunden automatisch gewählt wird. Der Befehl "CHOICE Bitte wählen: /C:123E /T:E,10" würde also nach 10 Sekunden die
Menüauswahl selbsttätig beenden.
Schreiben Sie nun eine kleine Batchdatei mit dem Namen 'MENU.BAT', die zur Auswahl
stellt, ob man die DOSSHELL oder WINDOWS starten möchte. Wird innerhalb von 5
Sekunden keine Wahl getroffen, soll die Meldung "Hallo, User" und die normale
Eingabeaufforderung erscheinen. (Lösung 2 im Anhang D)
6.2.2. Farbige Menüs
Um bei Auswahlmenüs etwas Farbe ins Spiel zu bringen, muß die Datei ANSI.SYS mit dem Befehl DEVICE in der CONFIG.SYS installiert worden sein. Dann können mit sogenannten
Steuersequenzen (Escape- oder Fluchtsequenz, mehr dazu im Anhang A) vielfältige
Manipulationen der Bildschirmein- und ausgabe vorgenommen werden. Jeder Steuersequenz
gehen die ASCII-Zeichen 27 (ESC-Zeichen) und 91 ("[") voraus. Da das ASCII-Zeichen 27
nicht druckbar ist, kann es nur mit einem Trick im DOS-Editor benutzt werden. Man drückt dazu
die Tastenkombination STRG-P (STRG- und P-Taste gleichzeitig drücken) und anschließend die
ESC-Taste. Es erscheint ein kleiner "Nach-Links"-Pfeil. Nun gibt man noch die eckige Klammer
ein und den eigentlichen Steuercode, abhängig davon, was man erreichen möchte (Auflistung im
Anhang A).
Das folgende Beispiel gibt eine rote Titelleiste und ein gelbes Menü aus. Anschließend steht eine
blaue Eingabeaufforderung. Nach dem Ende des Programms wird wieder mit weißer Farbe geschrieben. Denken Sie daran: "←" bedeutet, daß Sie die Tasten STRG-P und ESC drücken müssen!
@echo off
cls
echo ←[31;1m****** Spiele ******←33;1m
echo.
echo 1 = Spiel1
echo 2 = Spiel2
echo E = Ende
echo ←[34;1m
choice Bitte wählen C:12E
echo ←[37;0m
if errorlevel 3 goto ende
if errorlevel 2 goto 2
if errorlevel 1 goto 1
:2
echo Spiel2
goto ende
:1
echo Spiel1
goto ende
:ende
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
17
6.2.3. Mit Signalton den Anwender aufmerksam machen
Wenn Sie wollen, können Sie mit "ECHO •" ein kurzes Klingelsignal ausgeben. Das Zeichen "•
" erhalten Sie, wenn Sie wieder die Tasten STRG-P drücken und anschließend die Tasten ALT-7
betätigen (ASCII-Zeichen für BELL).
Um in dringenden Fällen den Anwender auf eine Eingabe aufmerksam zu machen, kann auch
eine ständige Folge von Tonsignalen ausgegeben werden. Das folgende Beispiel gibt solange das
Tonsignal aus, bis der Anwender die Eingabe beantwortet.
Dazu wird wieder ein Trick verwendet. CHOICE stellt mit dem Schalter "/N" nicht dar, was eingegeben werden soll. Deshalb steht dies nun beim Text dabei: Bitte wählen [1,2,E]. Zusätzlich
gibt es jetzt eine "versteckte" Eingabemöglichkeit, nämlich die "3"! Diese versteckte Eingabe
wird nach jeweils einer Sekunde automatisch ausgewählt, wenn nicht eine andere Taste gedrückt
wird. Sodann springt DOS zur Marke "klingel" und erzeugt dort ein Tonsignal. Die Zeichen "←
[2A" bedeuten, daß der Cursor um zwei Zeilen nach oben verschoben werden soll.
@echo off
cls
echo ****** Spiele ******
echo.
echo 1 = Spiel1
echo 2 = Spiel2
echo E = Ende
echo.
:start
choice Bitte wählen [1,2,E] /C:12E3
if errorlevel 4 goto klingel
if errorlevel 3 goto ende
if errorlevel 2 goto 2
if errorlevel 1 goto 1
:klingel
echo •←[2A
goto start
:2
echo Spiel2
goto ende
:1
echo Spiel1
goto ende
:ende
/N
/T:3,1
6.2.4. Fenstertechnik mit direkter Cursorpositionierung
Das man mit Batchdateien auch so etwas wie Auswahlfenster erzeugen kann, zeigt das letzte
Beispiel dieser Reihe. Es nutzt die Sonderzeichen des ASCII-Codes zur Darstellung von
doppelten und einfachen Rahmenelementen. Dies setzt voraus, daß der Zeichensatz 437 (US)
eingestellt ist und nicht wie üblich der mehrsprachige mit der Nummer 850. Andernfalls werden
die Ecken nicht richtig dargestellt. Es folgt eine Tabelle der ASCII-Codes für Rahmenelemente
(ALT-Code):
203
201
204
200
206
202
185
188
186
205
169
195
192
191
197
193
210
209
194
187
180
217
179
196
213
198
212
184
216
207
214
181
199
190
211
183
215
208
182
189
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
18
Um Fenster übereinandersetzen zu können, muß man die Cursorposition (die Stelle an der als
nächstes etwas ausgegeben wird) steuern. Dazu gibt es die ANSI-Sequenz "←[ posy;posx H".
Dabei bedeutet "posy" in welcher Zeile und "posx" in welcher Spalte ein Text erscheinen soll.
Da CHOICE immer am Zeilenanfang beginnt, muß wieder getrickst werden. Die Eingabe erfolgt
deshalb am unteren Bildschirmrand (in Bildschirmzeile 22).
Zur besseren Darstellung wurde hier ein andere Schriftart gewählt. Statt der 'uralt'Rahmentechnik mit Plus-, Minuszeichen und dem Pipesymbol sollten die Rahmenelemente
benutzt werden:
@echo off
:start
cls
echo ←[34;47;1m←[4;30H+----------------------+←[37;0m
echo ←[34;47;1m←[5;30H¦←[32;1m ****** Spiele ****** ←[34;1m¦←[37;0m
echo ←[34;47;1m←[6;30H¦----------------------¦←[37;0m
echo ←[34;47;1m←[7;30H¦←[33;1m
1 = Spiel1
←[34;1m¦←[37;0m
echo ←[34;47;1m←[8;30H¦←[33;1m
2 = Spiel2
←[34;1m¦←[37;0m
echo ←[34;47;1m←[9;30H¦←[33;1m
E = Ende
←[34;1m¦←[37;0m
echo ←[34;47;1m←[10;30H¦
¦←[37;0m
echo ←[34;47;1m←[11;30H¦ Bitte wählen [1,2,E] ¦←[37;0m
echo ←[34;47;1m←[12;30H+----------------------+←[37;0m
echo ←[34;47;1m←[22;0H
choice /C:12E /N
if errorlevel 3 goto auf
if errorlevel 2 goto 2
if errorlevel 1 goto 1
:auf
echo ←[34;41;1m←[10;27H+---------------------------+←[37;0m
echo ←[34;41;1m←[11;27H¦ Wirklich aufhören [J,N] ¦←[37;0m
echo ←[34;41;1m←[12;27H+---------------------------+←[37;0m
echo ←[22;0H
choice /C:JN /N
if errorlevel 2 goto start
if errorlevel 1 goto ende
:2
echo punkt2
goto ende
:1
echo punkt1
goto ende
:ende
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
19
6.3. Finden von Dateien und Verzeichnissen
Der im DOS vorhandene Filter FIND kann die Suche nach verlegten Dateien oder bestimmten
Texten sehr erleichtern. Üblicherweise benutzt man Filter nach einem regulären DOS-Befehl,
wobei zwischen den Befehlen das Pipesymbol steht. Hinter FIND muß dann nur noch angegeben
werden, wonach man sucht und einer der Schalter /I (Groß- oder Kleinschreibung nicht beachten), /V (alles anzeigen, das den Suchtext nicht enthält), /C (nur Anzahl gefundener Zeilen zeigen).
Geben Sie ein:
TYPE AUTOEXEC.BAT ¦ FIND "path" /i ↵
Neben dieser "normalen" Anwendung kann FIND auch alleine eingesetzt werden. Dann muß
allerdings hinter dem Suchtext angegeben werden, in welcher Datei gesucht werden soll.
Geben Sie ein:
FIND "path" AUTOEXEC.BAT /i ↵
Um mit dem Befehl näher vertraut zu werden, schreiben wir folgende Batchdatei mit dem
Namen ZITAT.BAT. Damit kann man in verschiedenen Dateien nach Textausschnitten suchen.
@echo off
if %1?= =? goto fehler
if %2?= =? goto fehler
set zitat=%1
:start
shift
if %1?= =? goto ende
for %%a in (%1) do find
goto start
"%zitat%"
%%a
/i
:fehler
echo Syntax: ZITAT Suchtext Dateiname1 Dateiname2 Dateiname3 ...
:ende
Die FOR-Schleife ist nur nötig, damit der Dateiname sogenannte Wildcards bzw. Joker (* und ?)
enthalten darf. Versuchen Sie die Batchdatei an folgendem Beispiel:
Geben Sie ein:
ZITAT text c:\*.??t c:\dos\*.txt ↵
Interessanter ist der FIND-Befehl, wenn man Dateien sucht. Man benutzt dazu wieder die erste,
einfache Syntax mit dem Pipesymbol und läßt FIND als Filter für den DIR-Befehl arbeiten. Da
DIR in der Regel Großbuchstaben ausgibt, sollte hier der Schalter /i verwendet werden.
Geben Sie ein:
DIR C:\*.BAT ¦ FIND "autoexec" /i ↵
Damit lassen sich Dateisuchprogramme realisieren, die in allen Verzeichnissen nach einer bestimmten Datei suchen. Nennen Sie die nächste Batchdatei SUCHE.BAT.
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
20
@echo off
if not %1?= =? goto weiter
echo Syntax:
SUCHE
Dateiname
goto ende
:weiter
dir \*.*
/-p /s
¦
FIND
"%1"
/i
¦
MORE
:ende
Im Gegensatz zum Befehl "DIR %1 /s" hat diese Syntax den Vorteil, daß auch Teile des Dateinamens angegeben werden können:
Geben Sie ein:
SUCHE win ↵
Für das Suchen von Verzeichnissen ist etwas mehr Grundkenntnis über DOS nötig. Im Prinzip
wäre es auf die gleiche Weise möglich Verzeichnisse so zu suchen, wie vorhin Dateien. Dazu
muß man nur wissen, daß Verzeichnisse lediglich leere Dateien ohne Endung sind. Der Befehl
"DIR *." gibt nur alle Unterverzeichnisse aus. In obiger Batchdatei müsste also nur eine Zeile
verändert werden:
dir \*. /s/p ¦ FIND "%1" /i
FIND liefert, wie die meisten anderen Befehle, einen ERRORLEVEL zurück. Dieser ist 0,
falls ein Eintrag gefunden wurde und größer (also 1), wenn nichts gefunden wurde. Ändern
Sie die Datei SUCHE.BAT so ab, daß bei erfolgreicher Suche nur der Text "Gefunden!"
ausgegeben wird! Die gefundenen Einträge sollen nicht angezeigt werden. Falls nichts
gefunden wird, soll als Text nur "Leider nichts!" erscheinen (Lösung im Anhang D).
Für Batchdateien ist es meist recht praktisch zu wissen, daß in jedem Verzeichnis eine NULDatei existiert. Diese NUL-Datei kann mit dem IF EXIST-Befehl geprüft werden. Allerdings hat
dieser Befehl den Nachteil, nur eine bestimmte Datei in einem bestimmten Verzeichnis finden zu
können. Deshalb kann er nicht allgemein verwendet werden. Nächstes Beispiel hat den Namen
PFAD.BAT und stellt fest, ob ein vorgegebener Pfadname existiert.
@echo off
if not %1?= =? goto weiter
echo Syntax:
PFAD
Verzeichnisname
goto ende
:weiter
if exist
%1\nul
echo Verzeichnis gefunden!
:ende
Im nächsten Beispiel soll nach dem Windows-Verzeichnis gesucht werden:
Geben Sie ein:
PFAD c:\windows ↵
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
21
6.4. Automatische Installationsroutinen
Die oben aufgeführten Erkenntnisse lassen sich nun praktisch umsetzen, um zum Beispiel Softwareinstallation automatisch durchführen zu lassen. Wenn Sie beispielsweise ein Archiv mit gepackten Dateien auf einer Diskette besitzen, wäre es sicher von Vorteil, wenn diese Dateien in
das richtige Verzeichnis kopiert und dort ausgepackt werden. Sogar automatisierte Anpassungen
in der Datei CONFIG.SYS oder AUTOEXEC.BAT sind möglich!
6.4.1. Installationslaufwerk und Verzeichnisse prüfen
Da Installationsprogramme in der Regel von einer Diskette aus aufgerufen werden, muß
zunächst festgestellt werden, in welchem Laufwerk die Diskette liegt. Am einfachsten geschieht
dies mit dem VOL-Befehl, der die Laufwerksangabe beeinhaltet. Die Ausgabe des Befehls wird
in einer Temporärdatei festgehalten und dann mit FIND auf die jeweilige Angabe durchsucht.
Das nachstehende Beispiel mit dem Namen INSTALL.BAT prüft, ob es sich um Laufwerk A:,
B: oder die Festplatte handelt.
@echo off
rem **** Installationsdatei, muß von A oder B aus gestartet werden
****
set drive=C
vol
>
c:\temp1$$.$$$
:search_a
find "Laufwerk A"
c:\temp1$$.$$$
if
errorlevel 1 goto search_b
set drive=A
goto install
> nul
:search_b
find "Laufwerk B"
c:\temp1$$.$$$
> nul
if
errorlevel 1 goto no_valid_drive
set drive=B
goto install
:no_valid_drive
echo Diskette bitte von Laufwerk A: oder von Laufwerk B: aus starten!
echo.
echo Wechseln Sie das Laufwerk: A: [RETURN] oder B: [RETURN]
echo Starten Sie erneut:
INSTALL [RETURN]
goto ende
:install
rem **** hier beginnt die Installation
****
Die Umgebungsvariable %DRIVE% enthält jetzt den Laufwerksbuchstaben. Sie kann nun von
jedem beliebigen Befehl in Batchdateien genutzt werden. Zum Beispiel:
xcopy %drive%:\*.* c:\
Wenn man die Dateien aber in ein bestimmtes Verzeichnis kopieren will, muß man vielleicht
erst prüfen, ob dieses Verzeichnis überhaupt existiert. Im nächsten Beispiel sollen
Bildschirmschoner für Windows installiert werden. Diese Programme mit der Endung SCR
müssen sich im Windows-Hauptverzeichnis befinden. Also muß vor dem Kopieren zunächst
geprüft werden, in welchem Verzeichnis sich Windows befindet. Es wird angenommen, daß es
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
22
sich um die Verzeichnisse C:\WINDOWS\ oder C:\WIN31 handelt. Die Suche geschieht nach
bekanntem Schema:
if not exist c:\windows\nul
set windir=c:\windows\
goto install2
:win1
if not exist c:\win31\nul
set windir=c:\win31\
goto install2
goto
goto
win1
fehler
:fehler
echo WINDOWS-Verzeichnis nicht gefunden
echo Automatisches Installieren nicht möglich!
goto ende
:install2
rem **** hier beginnt das Kopieren oder die weitere Installation
****
Nun steht in der Umgebungsvariablen %WINDIR% das richtige Verzeichnis. Wenn Sie jetzt die
vorgenannten Beildschirmschoner installieren wollen, fehlt in der INSTALL.BAT nur noch der
Kopierteil, um eine komplette Installationsdatei zu besitzen.
xcopy %drive%:\*.scr
del c:\temp1$$.$$$
set drive=
set windir=
echo Alles erledigt!
%windir%
6.4.2. Automatische Installation mehrerer Disketten
Es kann allerdings auch einmal vorkommen, daß man mehrere Disketten hat, die alle der Reihe
nach installiert werden müssen. In diesem Fall muß zuerst eine zweite Installationsdatei auf die
Festplatte kopiert und dann aufgerufen werden. Außerdem wird vorausgesetzt, daß sich im Label
jeder Diskette die Nummer der Diskette befindet. Die Disketten haben also den Namen DISK1,
DISK2, etc. Dadurch kann die Installation in einer kontrollierten Reihenfolge stattfinden, indem
man mit VOL diesen Namen prüft. Eine Alternative dazu ist es, auf jeder Diskette eine Textdatei
(Name: DISK_ID.TXT) zu haben, in der die Nummer der Diskette steht, also beispielsweise
DISK1, DISK2, usw.
Die folgende Batchdatei namens SETUP.BAT spiegelt den ersten Teil der Installationroutine
wieder und ruft den zweiten Teil mit dem Namen INSTALL2.BAT auf.
@echo off
rem **** hier sollte wieder die Laufwerksabfrage aus INSTALL.BAT
stehen ****
rem **** anstelle dessen steht nur die folgende SET-Anweisung ****
set drive=A
xcopy install2.bat
c:
cd \
install2 weiter
c:\
> nul
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
23
Der zweite Teil enthält nun die eigentliche Installation, wobei jederzeit die Disketten gewechselt
werden können. Der Parameter "weiter" wird nur übergeben, um prüfen zu können, ob die Datei
INSTALL2.BAT von SETUP aufgerufen wurde oder per direkter Eingabe (Bedienungsfehler).
@echo off
if %1= =weiter goto install
echo Bitte Diskette 1 einlegen und SETUP aufrufen!
goto ende
:install
rem **** hier beginnt nun die eigentliche Arbeit
md c:\zielpfad
cd c:\zielpfad
xcopy
%drive%:\*.exe
> nul
****
:disk2
echo Bitte Diskette 2 einlegen
pause
vol %drive%: ¦ find "DISK2" > nul
rem Alternativ: if not exist %drive%:\disk_id.txt goto
rem
find "DISK2" %drive%:\disk_id.txt > nul
if errorlevel 1 goto disk2
xcopy
%drive%:\*.*
> nul
:disk3
echo Bitte Diskette 3 einlegen
pause
vol %drive%: ¦ find "DISK3"
if errorlevel 1 goto disk3
xcopy
%drive%:\*.*
> nul
disk2
> nul
echo Alles erledigt!
:ende
6.4.3. Erweitern der AUTOEXEC.BAT und CONFIG.SYS
Nach einer erfolgreichen Installation kann es nötig sein, das bestimmte Einträge in die
Systemdatei AUTOEXEC.BAT oder CONFIG.SYS vorgenommen werden müssen.
Selbstverständlich könnte man dies von Hand tun, aber eine richtige Installationsdatei erledigt
auch das. Um es nicht unnötig kompliziert werden zu lassen, wird vorausgesetzt, daß keine
Startmenüs (ab DOS 6.0 möglich) eingesetzt werden. In diesem Fall können neue Teile an die
bestehende Systemdatei angehängt werden.
Als Beispiel werden wir die normale Eingabeaufforderung (meist C:\>) durch eine ganz
besondere ersetzen. Zu diesem Zweck muß das alte Prompt aus der AUTOEXEC.BAT entfernt
werden und das neue eingefügt oder hinten angehängt werden. Da in vielen Rechnern in der
Startdatei die DOSSHELL oder Windows aufgerufen wird, wäre unser neues Prompt erst nach
Beendigung dieser Programme zu sehen. Also ist es in der Regel besser, neue Teile weiter oben
in die Startdatei einzufügen. Dazu schreiben wir als erstes eine kurze Textdatei mit dem Namen
TEIL1.BAT. Anstelle der " " sind Leerzeichen einzusetzen! Tippfehler wirken sich ungünstig
aus, also lieber zweimal kontrollieren.
@echo off
prompt $e[s$e[?7l$e[1;44;33m$e[1;1H$e[K$p$e[1;55H
$d / $t $e[3D:$e[0;2m$e[u$e[0;31m»$g$e[0;37m$e[7h
Nachdem wir nun das neue Prompt eingegeben und TEIL1.BAT stehen haben, müssen wir das
alte Prompt aus der AUTOEXEC.BAT entfernen. Das ist relativ einfach mit dem FIND-Filter
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
24
möglich. Wir suchen einfach alle Zeilen, die nicht den Befehl PROMPT enthalten. Dazu
verwenden wir den Schalter "/V" und leiten das Ergebnis in eine Temporärdatei um.
Anschließend entfernen wir auch noch den ECHO OFF Befehl in der ersten Zeile und fügen den
Rest mit unserer TEIL1.BAT zur neuen AUTOEXEC.BAT zusammen. Das Programm soll
NEUPROM.BAT heißen:
@echo off
type c:\autoexec.bat ¦ find "PROMPT"
if errorlevel 1 goto ende
type c:\temp1.$$$ ¦ find "ECHO OFF"
if errorlevel 1 goto ende
del c:\autoexec.bat
copy
teil1.bat + c:\temp2.$$$
echo J | del c:\temp?.$$$
echo Alles erledigt!
:ende
/i
/V
>
c:\temp1.$$$
/i
/V
>
c:\temp2.$$$
c:\autoexec.bat
>nul
6.4.4. Automatischer Neustart des Rechners
Nach dem Einbau eigener Teile in die Startdatei muß der Rechner neu gestartet werden, um sie
wirksam werden zu lassen. Leider gibt es keinen DOS-Befehl für den Neustart des Computers.
Man muß sich also selbst helfen, indem man mit dem Hilfsprogramm DEBUG.EXE ein entsprechendes Programm schreibt. Das ist relativ einfach, wenn man sich an die folgenden Vorgaben
hält:
Geben Sie ein:
Geben Sie ein:
debug c:\dos\reset.com
a100
↵
pop ds ↵
mov wo[472],1234 ↵
jmp FFFF:0000
↵ ↵
rcx
↵
c
w
q
↵
↵
↵
↵
Jetzt besitzen Sie eine Datei mit dem Namen RESET.COM. Wenn Sie dieses Programm durch
Eingabe von RESET aufrufen, wird ein Warmstart des Computers durchgeführt. Ideal ist es natürlich, diesen Befehl in die vorhin erwähnte NEUPROM.BAT einzubauen. Dazu müssen nur an
das Ende der Datei einige Befehle angehängt werden:
echo Der Rechner wird nun neu gestartet!
echo Bitte die Diskette aus dem Laufwerk A nehmen.
pause
reset
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
25
6.5. Datum und Uhrzeit abfragen: ein Terminkalender
Gelegentlich kann es von Vorteil sein, wenn man das Datum oder die Uhrzeit in Batchdateien
zur Verfügung hat. Damit lassen sich beispielsweise Sicherungskopien mit dem Datum als
Dateinamen versehen, so daß man leicht erkennen kann, in welcher Datei die Daten eines
bestimmten Tages liegen. Abgesehen davon kann es interessant sein, daß ein Programm nur an
einem bestimmten Tag im Jahr gestartet wird (zum Beispiel ein Aprilscherz oder an einem
Freitag, den 13.).
Die dazu nötige Batchdatei ist ziemlich lang, da jeder Tag und jedes Monat einzeln mit dem aktuellen Datum verglichen werden muß. Deshalb wird in der nächsten Beispieldatei HEUTE.BAT
nur ein Ausschnitt wiedergegeben, kann aber leicht vervollständigt werden.
@echo off
echo.
¦
date
>
temp.$$$
rem **** aktuellen Tag feststellen
find " 01." temp.$$$
> nul
if errorlevel 1 goto d02
set tag=01
goto month
:d02
find " 02." temp.$$$
> nul
if errorlevel 1 goto d03
set tag=02
goto month
:d03
****
rem **** hier wiederholt sich alles bis einschließlich dem 30.
:d30
find " 30." temp.$$$
if errorlevel 1 goto
set tag=30
goto month
:d31
set tag=31
****
> nul
d31
rem **** aktuellen Monat feststellen
:month
find ".01." temp.$$$
> nul
if errorlevel 1 goto m02
set monat=01
goto ende
:m02
find ".02." temp.$$$
> nul
if errorlevel 1 goto m03
set monat=02
goto ende
:m03
****
rem **** hier wiederholt sich alles bis einschl. November (.11.)
:m11
find ".11." temp.$$$
if errorlevel 1 goto
set monat=11
goto ende
:m12
set monat=12
> nul
m12
:ende
set datum="%tag%.%monat%."
set tag=
set monat=
del temp.$$$
****
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
26
Somit steht nach Ausführung dieser Batchdatei das aktuelle Datum in der Umgebungsvariable
%DATUM% zur Verfügung. Auf die Jahreszahl wurde bewußt verzichtet, sie kann aber nach
dem gleichen Schema ermittelt werden.
Mit dieser Umgebungsvariablen kann nun beispielsweise eine Reihe Termine durchgesehen werden. Sobald ein Datum gefunden wird, das dem aktuellen gleicht, wird der Termin auf dem Bildschirm ausgegeben. Nennen Sie die nächste Beispieldatei KALENDER.BAT:
@echo off
call
heute.bat
echo
Nicht vergessen:
> temp.$$$
echo.
>> temp.$$$
type
termine.txt
¦
find
%datum%
if errorlevel 1 goto ende
echo ←[33;47;1m
type
temp.$$$
¦ more
echo ←[37;40;0m
pause
:ende
if exist temp.$$$ del temp.$$$
>> temp.$$$
In der Datei TERMINE.TXT legen Sie nun Ihre wichtigen Daten ab. Als Beispiel speichern wir
hier einige Feiertage ab:
06.01.
24.12.
01.01.
16.04.95
Heilig Drei König
Weihnachten
Ein gutes neues Jahr!
Frohe Ostern '95
Sie sehen, daß es nicht auf die Reihenfolge der Termine ankommt. Es muß aber in jedem Fall ein
zweiziffriger Tag und Monat sein (also führende Null nicht vergessen). Der FIND-Filter zeigt
dann wieder die ganze, zum aktuellen Datum gehörige Zeile an.
Wenn Sie das Ganze in die Startdatei AUTOEXEC.BAT einbauen, wird automatisch nach dem
Einschalten des Rechners ein Termin angezeigt (falls einer gefunden wurde). Verwenden Sie
dazu einfach den Befehl
CALL KALENDER
Oder lassen Sie ihn mit einer entsprechenden Installationsroutine automatisch in Startdatei einbauen.
6.6. Diverses
6.6.1. Temporärverzeichnis automatisch löschen
In jeder AUTOEXEC.BAT (seit MS-DOS 5.0) befindet sich der Eintrag "SET TEMP=". Damit
wird festgehalten, wohin DOS und WINDOWS vorübergehend Dateien schreiben sollen, wenn
Sie zwischen den einzelnen Anwendungen wechseln. Diese Temporärdateien werden nach dem
Gebrauch nicht mehr gelöscht, was aber manchmal den Vorteil hat, daß nach einem Systemabsturz oft wieder Daten rekonstruiert werden können. Trotzdem sammelt sich sehr rasch eine
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
27
große Anzahl an Dateien an, die von Zeit zu Zeit wieder gelöscht werden müssen. Setzen wir für
dieses Beispiel voraus, daß ihre Temporärdateien ins Verzeichnis C:\TEMP geschrieben werden,
d.h. in der Datei AUTOEXEC.BAT steht "SET TEMP=C:\TEMP". Nennen Sie das nächste Beispiel WINDOWS.BAT und speichern Sie es im Verzeichnis C:\DOS. Bei jedem Aufruf von
WINDOWS mit dieser Batchdatei wird dann das Temporärverzeichnis geleert.
@echo off
attrib -r-h-s
c:\temp\*.*
echo J
¦ del
c:\temp\*.*
cd \windows
win :
6.6.2. Zweite Konfiguration für Spiele
Manche Spiele kommen mit dem Speicher, den DOS zur Verfügung stellt, nicht aus und machen
es deshalb notwendig, von einer Startdiskette aus eine andere Konfiguration zu laden.
Abgesehen davon, daß diese Startdiskette ständig in Griffnähe bereit liegen muß, ist es einfach
lästig und hält nur unötig auf. Besser ist es, wenn man entweder das Startmenü von MS-DOS 6.0
oder eine kleine Batchdatei benutzt, die nur die Startdateien AUTOEXEC.BAT und
CONFIG.SYS umbenennt und dann automatisch neu startet. Dazu nötig ist allerdings die Datei
RESET.COM, die wir bereits in einem früheren Abschnitt mit DEBUG erstellt haben. Das
Batchprogramm mit dem Namen SPIEL.BAT sichert zuerst die beiden Startdateien, indem es sie
mit einem anderen Namen versieht. Anschließend werden die vorbereiteten Startdateien für das
Spiel (mit der Endung GAM) so umbenannt, daß DOS nach dem RESET mit diesen
Programmen startet. Beim zweite Aufruf des Batchprogramms wird dieser Vorgang wieder
umgekehrt und DOS startet wieder mit den Orginaldateien.
@echo off
cd \
if exist autoexec.org
goto orginal
ren autoexec.bat autoexec.org
ren autoexec.gam autoexec.bat
ren config.sys config.org
ren config.gam config.sys
goto ende
:orginal
ren autoexec.bat autoexec.gam
ren autoexec.org autoexec.bat
ren config.sys config.gam
ren config.org config.sys
:ende
reset.com
6.6.3. DOS-Befehle erweitern und entschärfen
Da Macros, die mit DOSKEY definiert wurden, vor anderen DOS-Programmen mit gleichem
Namen ausgeführt werden, kann man bestimmte DOS-Befehle anders oder neu erstellen. Im
nächsten Beispiel wird so der Befehl DEL ersetzt. Wenn man dann eine Datei löschen möchte,
wird sie zuerst in das Temporärverzeichnis C:\TEMP kopiert und dann gelöscht. Das hat den
Vorteil, das sie im Zweifelsfall sofort wieder aus dem Temporärverzeichnis geholt werden kann.
Nur ab und zu sollte dann das Temporärverzeichnis C:\TEMP wieder gelöscht werden. Übrigens
kann man diese Umleitung des DEL-Befehls einfach umgehen, indem man entweder den Befehl
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
28
ERASE benutzt oder vor DEL ein Leerzeichen an den Zeilenanfang setzt. Unter diesen
Umständen wird nämlich der Orginalbefehl ausgeführt. Die beiden Macros EC und EA
erleichtern das Bearbeiten der beiden Startdateien. Nenn Sie dieses Batchprogramm
MACRO.BAT und schreiben Sie den Befehl CALL MACRO.BAT anstelle des DOSKEYBefehls in Ihre AUTOEXEC.BAT.
@echo off
LH doskey /insert
doskey del=xcopy $1 c:\tmp $g nul
doskey ec=edit c:\config.sys
doskey ea=edit c:\autoexec.bat
$T
del
$1
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
29
7. ANHANG A: Die ANSI-Sequenzen
Die Datei CONFIG.SYS enthält oft einen Gerätetreiber mit dem Namen ANSI.SYS. Wenn
dieses Programm installiert ist, stehen viele Funktionen wie beliebige Cursorbewegungen,
Bildschirmeinstellungen und Tastaturumbelegungen möglich. Die jeweilige Funktion wird dabei
durch eine einfache Textausgabe auf den Bildschirm oder zum Beispiel mit dem PROMPTBefehl bewerkstelligt. Um aber einen ANSI-Befehl von normalem Text unterscheiden zu
können, muß ein spezieller Code vereinbart werden. Dies sind die sogenannten EscapeSequenzen (zu deutsch: Fluchtsequenz oder besser Escape-Steuercodes). Sie werden so genannt,
weil sie mit einem ESC-Zeichen (ASCII-Code 27) eingeleitet werden. Auf das ESC-Zeichen
folgt immer die eckige Klammer "[". Beide zusammen ergeben die Escape-Sequenz, die vor
jedem Steuerbefehl angegeben sein muß. Da das ESC-Zeichen selbst meist nicht in einem Editor
oder in der Befehlszeile eingegeben werden kann (nicht druckbares Steuerzeichen), werden
manchmal Ersatzzeichenfolgen wie "$e" verwendet.
7.1. Cursor- und Bildschirmsteuerung
Um den Cursor an eine bestimmte Stelle zu bewegen oder die Bildschirmfarben zu ändern,
stehen viele Escape-Sequenzen zur Verfügung. Einige davon (die wichtigsten) werden
nachfolgend aufgeführt. Dabei steht die Zeichenfolge ESC[ für die ANSI-Startsequenz, also das
Escapezeichen (ASCII-Code 27) und die offene, eckige Klammer. Dahinter folgen ein oder
mehrere Parameter, die durch einen Strichpunkt getrennt werden und ein Steuerkommando. Das
Steuerkommando besteht aus einem einzelnen Buchstaben, wobei auf die Groß- und
Kleinschreibung geachtet werden muß.
ESC[y;xH
ESC[s
ESC[u
ESC[2J
ESC[vc;hc;am
Cursor bei x,y positionieren
Cursorposition speichern
Cursorposition wiederherstellen
Bildschirm löschen (CLS)
Bildschirmattribute ändern
x=0..79, y=0..24
vc=Vordergrundfarbe,
hc=Hintergrundfarbe,
a=Textattribut
Um diese Steueranweisungen zu nutzen, kann zum Beispiel der PROMPT-Befehl benutzt
werden. Es lassen sich damit sehr komfortable Eingabeaufforderungen erzeugen oder die
Hintergrundfarbe des Bildschirms vom tristen Schwarz in eine der anderen Farben ändern.
Folgende Tabelle zeigt alle Bildschirmattribute und Farben, die mit der letzten Steuersequenz
aus der oben angegebenen Tabelle eingestellt werden können.
Farbe
Schwarz
Rot
Grün
Gelb
Blau
Magentarot
Cyanblau
Weiß
Vordergr.
30
31
32
33
34
35
36
37
Hintergr.
40
41
42
43
44
45
46
47
Textattribute
Normal
Fettdruck (hell)
Code
0
1
Blinken
5
Invertiert
Verdeckt
7
8
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
30
Damit kann man zum Beispiel eine farbige Eingabeaufforderung einstellen:
Geben Sie ein:
PROMPT $e[34;1m$p$g$e[37;0m ↵
Mit zwei Befehlen läßt sich auch der gesamte Bildschirm einfärben:
Geben Sie ein:
Geben Sie ein:
PROMPT $e[44;33;1m$e[2J ↵
PROMPT $p$g ↵
Das nächste Beispiel ist ein wahrer Superprompt, der an der oberen rechten Bildschirmecke immer das aktuelle Datum und die Uhrzeit ausgibt.
Geben Sie ein:
PROMPT $e[s$e1;67H$d$e[2;70H$t$e[u$p$g ↵
Nächstes Beispiel färbt Datum und Uhrzeit, sowie das Prompt auch noch farbig ein:
Geben Sie ein:
PROMPT $e[41;37;1m$e[s$e1;67H$d$e[2;70H$t$e[u$e[40;34;1m$p$g$e[37;0m ↵
7.2. Tasten umbelegen
Unter Benutzung des PROMPT-Befehls können mit den ANSI-Sequenzen auch Tasten umbelegt
oder sogar ganze Befehle auf eine Taste gelegt werden. Dazu muß der Code des Zeichens angegeben werden und das Zeichen oder der Befehl, den diese Taste bewirken soll. Das Steuerkommando hinter dieser Zeichenfolge ist der Buchstabe p.
Um zum Beispiel die relativ unbenutzte Taste "#" mit dem häufig gebrauchten Rückschlag "\" zu
belegen, ist folgendes zu tun:
Geben Sie ein:
Geben Sie ein:
PROMPT $e["#";"\"p ↵
PROMPT $p$g ↵
Es muß allerdings dazu gesagt werden, daß viele Textverarbeitungsprogramme eine eigene Tastenauswertung besitzen und daher eine solche Umbelegung keine Auswirkung hat.
Es können jedoch nicht nur Tastencodes umbelegt werden, sondern auch ganze Befehle einer Taste zugeordnet werden. Besonders geeignet sind dazu die Funktionstasten F10 bis F12, weil sie
von DOS nicht anderweitig benutzt werden.
Geben Sie ein:
Geben Sie ein:
PROMPT $e[0;68;"DIR"p ↵
PROMPT $p$g ↵
Das Beispiel belegt die Taste F10 mit dem DIR-Befehl (F11 = 0;133).
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
31
8. ANHANG B: Das Programm DOSKEY
Will man mehr als nur den zuvor eingegebenen Befehl zur Verfügung haben, so muß man das
Programm DOSKEY aufrufen. Es installiert sich dann resident (= dauerhaft) im Speicher. Durch
dieses Programm hat man die Möglichkeit, wesentlich mehr Befehle zu speichern und wieder zurück zu holen. Sobald DOSKEY geladen ist, speichert es eine Liste der eingebenen Befehle. Die
Liste kann mit der Taste F7 angezeigt werden. Dabei ist am Anfang der Zeilen jedem Befehl
eine Zahl zugeordnet.
Geben Sie ein:
DOSKEY
MD \MYTEMP
COPY *.BAT C:\MYTEMP
Drücken Sie nun die F7-Taste!
↵
↵
↵
Mit den Tasten NACH-OBEN und NACH-UNTEN können Sie einen der eingebenen Befehle
wiederaufrufen. Sie werden nacheinander in die Befehlszeile kopiert, wo Sie sie entweder weiter
bearbeiten oder nochmal ausführen können.
Drücken Sie die NACH-OBEN-Taste bzw. NACH-UNTEN-Taste bis Sie den
Kopierbefehl wieder in der Anzeige haben!
Ändern Sie die Endung BAT im Befehl in SYS, indem Sie die NACH-LINKS-Taste bzw.
NACH-RECHTS-Taste benutzen und drücken Sie dann ↵!
Abgesehen von der Möglichkeit den gewünschten Befehl zu suchen, können Sie mit der F9Taste sofort den Befehl wieder reaktivieren. Dazu werden Sie nach dem Drücken der Taste
aufgefordert, die Nummer des Befehls einzugeben. Es kann also erforderlich sein, sich vorher
mit F7 die Liste noch einmal anzusehen. Sollte es sich nach der Eingabe der Nummer
heraustellen, daß es der falsche Befehl war, so kann der Befehl mit der ESC-Taste wieder von
der Anzeige gelöscht werden und ein erneuter Versuch erfolgen.
Drücken Sie die Taste F9 und anschließend die Taste 2 (falls dort Ihr Kopierbefehl war)
Ändern Sie die Endung BAT im Befehl in COM, indem Sie die NACH-LINKS-Taste bzw.
NACH-RECHTS-Taste benutzen und drücken Sie dann ↵!
Sobald man längere Zeit mit DOSKEY arbeitet, wird die Liste immer unübersichtlicher. Dann
wird es meist Zeit, mit Hilfe der Tastenkombination ALT-F7 alle Befehle in der Liste zu
löschen.
Drücken Sie gleichzeitig die ALT- und die F7-Taste!
Drücken Sie nun die F7-Taste allein, um sich den Listeninhalt anzusehen!
) Das Programm DOSKEY läßt eine sehr flexible Editierung und Wiederholung aller bereits
eingegebener Befehle zu.
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
32
8.1. Eingeben mehrerer Befehle in einer Zeile
Normalerweise kann nur ein Befehl je Zeile eingegeben werden. Wenn jedoch DOSKEY
installiert ist, können auch mehrere Befehle hintereinander in die gleiche Zeile geschrieben
werden. Dazu drücken Sie nach jedem Befehl die Tastenkombination STRG-T (= sTop) und
geben dann den nächsten Befehl ein. Erst am Schluß wird dann die Eingabetaste gedrückt und
alle Befehle der Reihe nach abgearbeitet. Es können allerdings nicht mehr als 128 Zeichen je
Zeile eingegeben werden!
Geben Sie ein:
DEL \MYTEMP\*.*
Drücken Sie STRG-T
Geben Sie dann ein: RD \MYTEMP
(nicht ↵ drücken!)
↵
) Mit dem Programm DOSKEY können auch mehrere Befehle in einer Zeile eingegeben werden.
8.2. Erstellen eigener Befehle (Makros)
Neben den bisher genannten Möglichkeiten können mit DOSKEY auch eigene neue Befehle erstellt werden. Weil dabei mehrere DOS-Befehle unter einem neuen Überbegriff zusammengefaßt
werden, nennt man dies auch einen MAKRO. Um ein Makro zu erzeugen, gibt man hinter dem
Aufruf von DOSKEY einfach den Namen des Makros (= neuer Befehlsname) und nach einem
Gleichheitszeichen den DOS-Befehl mit seine spezifischen Parameter an.
Geben Sie ein:
Geben Sie ein:
DOSKEY WDIR = DIR /O:N /W ↵
WDIR ↵
Es ist natürlich auch wieder möglich, mehrere Befehle in einer Zeile anzugeben. Allerdings kann
zur Trennung der Einzelbefehle nicht die Tastenkombination STRG-T benutzt werden, sondern
es muß die STRG-Taste durch das Dollarzeichen ersetzt werden. Als Trennung wird also die
Zeichenfolge $T angegeben.
Geben Sie ein:
Geben Sie ein:
DOSKEY PROG = DIR *.COM $T DIR *.EXE ↵
PROG ↵
Bei manchen Befehlen müssen beim Aufruf Werte mit übergeben werden. Das ermöglicht es,
Befehle flexibler zu gestalten. Für diese Übergabewerte kann bei Makrodefinitionen ein Platz
freigehalten werden. Dazu verwendet man die Variablen $1 bis $9. Wann immer DOS bei der
Ausführung auf eine solche Variable trifft, ersetzt es sie durch den entsprechenden beim Aufruf
übergebenen Wert. Das bedeutet, $1 steht für den ersten Übergabewert, $2 für den zweiten, usw.,
aufsteigend bis $9 (für den neunten Wert). Kommt also nur ein Wert vor, so heißt die Variable
$1. Falls die Anzahl der Übergabewerte nicht bekannt ist, kann auch die Variable $* benutzt
werden. In diesem Fall wird dann der gesamte Text hinter dem aufrufenden Befehl übernommen.
Geben Sie ein:
Geben Sie ein:
DOSKEY SUCH = DIR $1 /S ↵
SUCH *.DOC ↵
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
33
Da diese Befehle mit dem Ausschalten des Rechners verloren gehen, sollten Sie bei häufiger
Verwendung in die Stapeldatei AUTOEXEC.BAT eingefügt werden. Sie stehen dann nach
jedem Einschalten des Rechners sofort zur Verfügung.
)
DOSKEY ermöglicht es auch eigene Befehlskombinationen, sogenannte Makros, zu
erstellen.
9. ANHANG C: Das DEBUG-Dienstprogramm
Das DEBUG-Dienstprogramm ist nicht nur ein Werkzeug für Spezialisten, wie oft behauptet
wird, sondern es ermöglicht auch dem Normalanwender hervoragende Möglichkeiten, Dateien
und Programme anzusehen und zu manipulieren. Dazu stehen eine Reihe von Befehlen zur
Verfügung, die alle mit einem Buchstaben beginnen und dahinter ein oder mehrere Parameter
erfordern.
Davon wollen wir einige wenige benutzen und so einen kleinen Einblick in die geheimnisvolle
Welt hinter den Dateinamen tun. Wir schreiben uns dazu ein kleines Programm, das den
CHOICE-Befehl von DOS 6.x auch für DOS 5.0 Programme zur Verfügung stellt. Wir schreiben
das Programm in ASSEMBLER, also der Maschinensprache, mit der der Computer arbeitet.
Rufen Sie dazu das Programm DEBUG.EXE auf:
Geben Sie ein:
DEBUG ↵
Es erscheint ein kleines Minuszeichen als Eingabeaufforderung. Nun starten wir den Assembler.
Geben Sie ein:
a100 ↵
Es erscheint die Speicheradresse 100. Dahinter tippen Sie das folgende Programm ab.
mov
int
mov
int
ah,7
21
ah,4c
21
↵
↵
↵
↵ ↵
Wenn Sie zweimal die Eingabetaste gedrückt haben, steht wieder das Minuszeichen da. Die Befehle bewirken nur, daß von der Tastatur ein Zeichen eingelesen wird und dessen ASCII-Code
als ERRORLEVEL zurückgegeben wird. Um uns die Befehle noch einmal anzusehen, geben Sie
'u100' ein.
Geben Sie ein:
u100 ↵
Alle Befehle werden nocheinmal angezeigt. Beachten Sie, daß nach den eingegebenen auch
weitere Befehle enthalten sind. Dies ist kein Programm, sondern nur zufällige Speicherinhalte.
Der Prozessor interpretiert sie trotzdem als Programm. Wenn der Rechner 'abstürzt', führt er
meist solche sinnlosen Befehle aus, bis er neu gestartet wird.
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
34
Im Speicher des Computers sind meist auch Texte enthalten, man kann sie mit dem Befehl D ansehen.
Geben Sie ein:
d0 L6000 ↵
Um unser Programm zu speichern, geben wir ihm den Namen INPUT.COM.
Geben Sie ein:
nC:\DOS\INPUT.COM ↵
Dann speichern und beenden wir den Debugger mit den Tasten W (=write) und Q (=quit).
Geben Sie ein:
Geben Sie ein:
Geben Sie ein:
Geben Sie ein:
↵
↵
↵
↵
rcx
8
w
q
Folgendes Beispielprogramm zeigt die Anwendung unseres neuen Befehls. Sie können es im
DOS-Editor abtippen und unter AUSWAHL.BAT speichern.
@ECHO OFF
CLS
ECHO ***** AUSWAHL - MENÜ *****
ECHO.
ECHO
1 = erstes Programm
ECHO
2 = zweites Programm
ECHO ESC = Ende
ECHO.
ECHO Bitte wählen:
:ANFANG
INPUT
IF ERRORLEVEL
IF ERRORLEVEL
IF ERRORLEVEL
IF ERRORLEVEL
IF ERRORLEVEL
GOTO ANFANG
=
=
=
=
=
51
50
49
28
27
GOTO
GOTO
GOTO
GOTO
GOTO
:PROG1
ECHO Das erste Programm
GOTO ENDE
:PROG2
ECHO Das zweite Programm
GOTO ENDE
:ENDE
ECHO Auf Wiedersehen
ANFANG
PROG1
PROG2
ANFANG
ENDE
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
10. ANHANG D: Lösungen zu den Aufgaben
Aufgabe 1:
Batchdatei:
Syntax:
FORM!.BAT
FORM! Laufwerk:
@echo off
if %1?= =? goto fehler1
if %1= =c: got fehler2
if %1= =C: got fehler2
echo. ¦ format %1
goto ende
:fehler1
echo Kein Laufwerk angegeben!
goto ende
:fehler2
echo Festplatte C: darf nicht formatiert werden!
:ende
Aufgabe 2:
Batchdatei:
Syntax:
MENU.BAT
MENU
@echo off
cls
echo **** Auswahl-Menü *****
echo.
echo D = DOSSHELL
echo W = WINDOWS
echo E = Eingabeaufforderung
echo.
choice Bitte wählen: /C:DWE /T:E,5
if errorlevel 3 goto eingabe
if errorlevel 2 goto menu2
if errorlevel 1 goto menu1
:eingabe
echo Hallo, User!
goto ende
:menu1
dosshell
goto ende
:menu2
win
:ende
35
Kiermaier ©1995
Batchprogramme für DOS und WINDOWS
Aufgabe 3:
Batchdatei:
Syntax:
SUCHE.BAT
SUCHE Dateiname
@echo off
if not %1?= =? goto weiter
echo Syntax:
SUCHE
Dateiname
goto ende
:weiter
dir \*.* /s/p ¦ FIND "%1"
if errorlevel 1 goto nichts
echo Gefunden!
goto ende
:nichts
echo Leider nichts!
:ende
/i
> nul
36

Documentos relacionados