

BATCH-Programmierung, 4. Teil

Variablen...



Was kann man unter DOS nicht alles mit kleinen Hilfreichen
Batch-Utilities machen... Sie sind so manches mal eine schnelle
Hilfe fr alle mglichen DOS-Befehle und sind leicht zu schrei-
ben, bzw. zu programmieren. Setzen wir uns heute mal etwas mit
Variablen auseinander...halt! Nicht so weit, ein wenig nher,
soo, ja, ok, los geht's:

Ein jedes Programm, sei es mit BASIC, Pascal oder C geschrieben,
braucht Variablen, die an Stelle von Zeichenketten (Strings) oder
Zahlen zur Verfgung stehen, damit sie immer allgemeingltig und
vernderbar sind. So bieten auch Batch-Programme Variablen an,
nmlich Variablen, die von auen her definiert werden knnen, 
als auch Variablen, die im Programm intern definiert werden kn-
nen. Und mit Hilfe einiger Tricks kann man diese auch auswerten
und Verndern, allerdings lngst nicht so gut, komfortabel und
vielseitig wie in den "richtigen" Programmiersprachen. 

Zu den von auen definierten Variablen:
Sie beginnen mit einem %-Zeichen und knnen danach einen oder 
mehrere Buchstaben beinhalten, z.B. %A oder %ICH oder %XXXX.
Der Einfachheit halber wird man aber die Schreibweise mit Zahlen
bevorzugen, weshalb ich diese auch benutzen werde. Also definiert
man unsere Variablen mit %1 oder %2 u.s.w. Bei einem Programm 
werden meist Zeilenparameter mitangegeben, z.B. ist bei der Ein-
gabe "FORMAT C:" die Zeichenkette C: ein Zeilenparameter, damit
das Programm wei, welches Laufwerk es formatieren mu...:-)
Bei einem Auruf eines Batchs kann man je nach Batch selbst auch
Zeilenparameter bergeben, die im Programm abgefragt werden
knnen. Ein einfaches Programm:

@ECHO OFF                            <-- 1. Zeile
ECHO.                                <-- 2. Zeile
ECHO Formatiere Laufwerk : %1        <-- 3. Zeile   
ECHO.                                <-- 4. Zeile 
PAUSE                                <-- 5. Zeile  
FORMAT %1                            <-- 6. Zeile
ECHO.                                <-- 7. Zeile

1. Zeile: Abschaltung der Befehlsausgabe
2. Zeile: Leerzeile ausgeben
3. Zeile: Ausgabe eines Textes, in dem eine Variablen enthalten
          ist.
4. Zeile: Leerzeile ausgeben
5. Zeile: Es wird auf einen Tastendruck gewartet
5. Zeile: Aufruf des Programms FORMAT mit Parameterbergabe %1
6. Zeile: Leerzeile ausgeben

Diese Programm knnte "FORM" heien, es wre eine Abkrzung des
eigentlichen Programms FORMAT. In dem Programm wird EIN Zeilen-
parameter erwartet ( %1 ), der im Programm an die Stelle der 
bergebenen Zeichenkette tritt. Also knnte man das Programm
mit FORM A: starten.

Nun kommen die internen Variablen an die Reihe. Es wre doch
schn, den User zu informieren, wie der Formatierungsvorgang
ausgegangen ist. Dazu definieren wir eine Zeichenkette, die am
Schlu Meldung macht. Das MS-DOS Programm FORMAT hat als Ergeb-
nis der Formatierung einen Wert, auch ERRORLEVEL genannt. Wenn
der ERRORLEVEL einen bestimmten Wert annimmt, ist entweder ein
spezifischer Fehler aufgetreten oder alles verlief aalglatt.
Die ERRORLEVEL von FORMAT:

 0    = der Formatierungsvorgang verlief ohne Fehler
 3    = der Benutzer hat die STRG-TASTE+C oder die STRG-Taste+  
        UNTBR gedrckt, um den Vorgang abzubrechen
 4    = es ist ein schwerer Fehler aufgetreten
 5    = der Benutzer hat als Antwort auf die Frage "Formatieren
        durchfhren (J/N)" die Taste "N" gedrckt, um den Vorgang
        abzubrechen.

Erweitern wir unser Programm:

@ECHO OFF                           
CLS
ECHO.                               
CHOICE /C:JN "Soll ich Laufwerk %1 formatieren "
IF ERRORLEVEL 2 GOTO MELDUNG
GOTO WEITER
:MELDUNG
SET Meldung1=Abbruch!
SET Meldung2=Formatiere Laufwerk %1 nicht!
GOTO END
:WEITER
ECHO.                               
FORMAT %1                           
IF ERRORLEVEL 0 SET Meldung1=Alles Ok!
IF ERRORLEVEL 0 SET Meldung2=Laufwerk %1 ohne Fehler formatiert
IF ERRORLEVEL 3 SET Meldung1=Abbruch!
IF ERRORLEVEL 3 SET Meldung2=Abbruch beim Formatiervorgang!
IF ERRORLEVEL 4 SET Meldung1=Abbruch!
IF ERRORLEVEL 4 SET Meldung2=Ein schwere Fehler trat auf!
IF ERRORLEVEL 5 SET Meldung1=Abbruch!
IF ERRORLEVEL 5 SET Meldung2=Vorgang bei Abfrage abgebrochen!
ECHO.                               
:END
CLS
ECHO %Meldung1%
ECHO %Meldung2%
SET Meldung1=
SET Meldung2=
ECHO.

So dieses Programm ist etwas umfangreicher auf grund der vielen
Abfragen. Also, zuerst wird die Befehlsausgabe ausgeschaltet, das
Zeichen @ selbst verhindert, da ECHO OFF noch mit ausgegeben 
wird, da zu diesem Zeitpunkt die Befehlsausgabe noch an ist. So
knnte man statt @ECHO OFF auch vor jede Zeile das Zeichen @ 
setzen, doch wre das bei greren Programmen umstndlicher.
Zur reinen Erfahrung knnt ihr ja mal das @ECHO OFF weglassen und
das Programm so starten. Am besten macht ihr ein ; davor, damit
ihr die Zeile nicht lschen mt. So ist sie nmlich als Kommen-
tar definiert. brigens drfen Kommentare und regulrer Programm-
Code nicht in einer Zeile stehen!
Mit CLS (CLearScreen) wird der Bildschirm gelscht und eine Leer-
zeile erzeugt, da der Punkt (.) selbst nicht dargestellt werden
kann. Jetzt kommt eine CHOICE-Abfrage ( s. MC#2). Mit dem Para-
meter /C: werden die Auswahlmglichkeiten bestimmt, hier also
J und N, dann folgt der auszugebende Text, der eine Variable 
enthlt. Man sehe und staune: Auch bei der Batch-Programmierung
kann man Variablen und Programme untereinander kombinieren. Nun
kommt eine Abfrage. Wenn der ERRORLEVEL 2 entstanden ist, was 
passiert, wenn die Taste N gedrckt wurde (weil J = 1 und N = 2
ist), dann soll eine an die Sprungstelle MELDUNG gesprungen wer-
den, wobei dann zwei interne Variablen definiert werden, nament-
lich auftretend mit MELDUNG1 und MELDUNG2. Der Befehl, um eine 
solche Variable zu definieren, lautet SET. Gibt man so am DOS-
Prompt SET ein, sieht man alle zur Zeit definierten Variablen. 
Also, Meldung1 wird mit dem String "Abbruch!" definiert, Meldung2 
mit "Laufwerk %1 ohne Fehler formatiert". Auch hier sieht man 
wieder, da man auch Variablen untereinander definieren kann. So 
fliet der der Inhalt von %1 in Meldung2 ber. Nun mu ans Ende
mit Hilfe der Anweisung GOTO END gesprungen werden, wo die Mel-
dungen ausgegeben werden. Doch dazu spter. Sollte der Benutzer
also J gedrckt haben, wird dieser ERRORLEVEL 2 also nicht abge-
arbeitet, sondern durch GOTO WEITER an die Sprungmarke WEITER 
gesprungen, wo dann die Formatierung durchgefhrt wird. Die oben
vorgestellten ERRORLEVEL von FORMAT werden nun abgearbeitet. 
Bei ERRORLEVEL 0 wird Meldung1 UND Meldung2 definiert, deshalb
auch zwei IF-Abfragen. Das gleiche wird mit 3, 4 und 5 gemacht,
so da am Ende eine gute Auswahl an Informationen besteht.
Am Schlu wird der Bildschirm aufgerumt und die Meldungen mit 
ECHO ausgegeben. Um nun an den Inhalt der definierten Variablen
zu gelangen, setzt man die Variable ganz einfach zwischen zwei 
%-Zeichen. So wird mit ECHO %Meldung1% der aktuelle Inhalt der
INTERNEN Variablen Meldung1 ausgegeben. Nachdem die Meldungen
ausgegeben worden sind, werden die Variablen aus dem Speicher
gelscht, in dem sie mit "nichts" definiert werden. Das Programm
ist beendet.

Ich gebe zu, das war ein umfangreiches und etwas komplizierteres
Proggi, aber mit Lust und etwas Experimentierfreudigkeit wird das
ganze was. Mit SET kann man ruhig herumtfteln, man kann kaum 
etwas falsch machen. Zum Schlu noch einige Hinweise:


1. Bei dem Befehl CHOICE  -IMMER-  mit dem hchsten ERRORLEVEL 
   anfangen, abzufragen. Bei der Auswahl /C:JNV wrde also der 
   hchste ERRORLEVEL drei lauten. Informationen hierzu sind im
   MicroCode 2 zu finden.

2. Bei dem Befehl SET mu darauf geachtet werden, da sowohl vor
   als auch nach dem Gleichheitszeichen  -KEIN-  Freiraum bleibt.
   Bei SET also die Variable und den Text ganz nah an das "="
   heransetzen.

3. Am Ende eines Programmes sollte man am besten die Variablen
   mit SET wieder lschen, denn sie belegen Speicherplatz. DOS
   reserviert fr sich Speicherplatz, wenn dieser Platz unntig
   durch interne Variablen belegt wird, kann das im schlimmsten
   Fall zu einem Absturz fhren. Also den Mll wieder wegmachen.
   Die Zeilenvariablen ( %1,... ) werden am Ende des Programms
   automatisch gelscht.

4. Alle hier vorgestellten Befehle kann man auch im DOS-Handbuch
   und der Online-Hilfe von DOS nachschauen. Bei Fragen knnt ihr
   euch aber auch an mich wenden.


Der Kurs geht weiter...
                               Eric der Schreckliche
                                Ŀ
                                
                                
                                ٳ
                                  
                                  
