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 Ŀ ٳ