Inhaltsverzeichnis

Batchen am nackten Pofo

Ohne jegliche Zusatzsoftware lassen sich kleine „Programme“ schreiben, das Erstellen von Stapelverarbeitungsdateien ist in Portfolios Original-Handbuch beschrieben (siehe Handbuch). Die AUTOEXEC.BAT ist bereits ein solches „Programm“. Unter Tipps & Tricks sind bereits einige Beispiele aufgeführt:

Mehr zum Befehl IF

Im Handbuch wird beschrieben wie man mit dem IF Befehl prüft ob eine Datei existiert, nicht aber wie man prüft ob überhaupt ein Dateiname als Parameter übergeben wurde.

IF %1== GOTO ENDE

funktioniert leider nicht, IF hält ENDE für den Befehl der ausgeführt werden soll, falls das Wort GOTO als Parameter übergeben wurde. Es ist leider nicht möglich, einen Parameter mit einer Leerstelle zu vergleichen. Es gibt auch kein Symbol, das der Befehl IF als „nichts“ interpretiert. Glücklicherweise erlaubt es IF die Bedingungen als „Ketten“ zu vergleichen, d.h. man kann „%1Datei“ mit „Datei“ vergleichen, kürzer %1D==D. Dies ist wahr wenn %1 leer ist. Um die Lesbarkeit der Batch-Datei zu erhalten, nehmen wir den „.“ als Kettenglied:

IF %1.==. GOTO ENDE

Wurde kein Parameter übergeben, verzweigt die Batchdatei zur Sprungmarke ENDE. Dasselbe gilt für Umgebungsvariablen:

IF %Name%.==. GOTO NONAME

Falls die Umgebungsvariable „Name“ nicht existiert (also „.“ gleich „.“ ist) verzweigt die Batch-Datei zur Sprungmarke NONAME.

Der Parameter %0

In Portfolios Handbuch werden die Kommandozeilen Parameter in Batch-Dateien auf den Seiten 46 und 47 beschrieben. Der Parameter %0 ist der Name der aufgerufenen Datei selbst. Beim Portfolio gibt es da aber ein Detail. Zum Beispiel die Zeile

echo %0 %1 %2

gibt den Namen der aufgerufenen Datei (%0) und die übergebenen Parameter %1 und %2 am Bildschirm aus. Wird diese Datei (nennen wir sie ZEIG.BAT) folgendermaßen aufgerufen:

ZEIG EINS ZWEI

wird auf dem Bildschirm folgendes ausgegeben:

ZEIG EINS ZWEI

Wird die Datei aber mit der Erweiterung „.BAT“ aufgerufen

ZEIG.BAT EINS ZWEI

wird der Portfolio

ZEIG .BAT EINS

anzeigen.

Während ein PC den Dateinamen mit Erweiterung als Ganzes interpretiert trennt der Portfolio zwischen Datei und Erweiterung. Somit ist die Erweiterung zum Parameter %1=„.BAT“ geworden. „EINS“ ist nun Parameter %2 und „ZWEI“ Parameter %3, der in der Batch-Datei ZEIG.BAT nicht abgefragt wird und somit auch nicht mehr auf dem Bildschirm erscheint. Entweder man sorgt dafür, dass Batch-Dateien nie mit der Erweiterung aufgerufen werden, oder man trifft Vorkehrungen in der Datei. Zum Beispiel:

@echo off
if not %1==.bat goto weiter
set par0=%0%1
shift
echo %par0% %1 %2 %3
goto ende
:weiter
echo %0 %1 %2 %3
:ende
set par0=

Nennen wir die Datei ZEIGPARM.BAT
Rufen wir die Datei ganz normal ohne Erweiterung auf, also

ZEIGPARM EINS ZWEI DREI

so erhalten wir die Ausgabe

ZEIGPARM EINS ZWEI DREI

Rufen wir die Datei mit der Erweiterung „.BAT“ auf, also

ZEIGPARM.BAT EINS ZWEI DREI

bekommen wir auch die entsprechende Ausgabe:

ZEIGPARM.BAT EINS ZWEI DREI

und kein Parameter geht verloren.

ECHO mit Grafikzeichen

Nur weil man in einer Batch-Datei ist, muss man nicht auf eine etwas ansprechendere Bildschirmausgabe verzichten. Auch der Befehl ECHO kann so manches ausgeben, wenn man es ihm entsprechend übergibt. Wenn NUMLOCK eingeschaltet ist, kann man ASCII-Codes als dreistellige Zahl eingeben. So kann man zusammen mit ECHO Grafikzeichen verwenden. Beispiel:
Beginnen sie eine Batch-Datei wie gewöhnlich im Texteditor zu tippen:

@echo off
echo

Nach dem zweiten ECHO kommt eine Leerstelle. Schalten sie nun NUMLOCK ein (Fn+N), der Cursor ist nun ein Unterstrich und die Tastatur gibt die rot bedruckten Tastencodes wieder. Halten sie Alt gedrückt, während sie den dreistelligen ASCII-Wert eingeben, z.B. 178 für das Zeichen „▓“ (ACHTUNG: die rot bedruckten Tasten verwenden, also J, 7 und 8). Lassen sie Alt los und das Symbol erscheint auf dem Bildschirm. Als nächstes Zeichen geben wir „▒“ ein. Halten sie Alt gedrückt, während sie J 77 nacheinander eingeben. Als letztes das Zeichen „░“: J 7O, also ASCII-Code 176.
Die Batch-Datei müsste nun so aussehen:

@echo off
echo ▓▒░

Nun schalten sie NUMLOCK wieder aus: Fn+N und tippen sie z.B. „TEST“

@echo off
echo ▓▒░TEST

Um nicht wieder NUMLOCK einschalten und die ASCII-Codes einzeln eingeben zu müssen verwenden sie das Klemmbrett, um die Grafik-Zeichen in umgekehrter Reihenfolge an das Ende der Zeile anzuhängen. Dann ist die Zeile vollständig:

@echo off
echo ▓▒░TEST░▒▓

Auf diese Art kann man die unterschiedlichsten Zeichen ausgeben, so z.B. auch AES-Fenster auf den Bildschirm bringen:

  @echo off
  cls
   echo ╔════════════╗
   echo ║ Hallo Welt.    ║
   echo ╚════════════╝
  pause >nul
  cls

Dies sind die entsprechenden ASCII-Werte:

SymbolASCII
201
205
187
186
200
188

So kann man alle ASCII-Werte zwischen 32 und 255 eingeben. Wer diese Dinge häufiger tut wird sich eine Datei anlegen in der die Symbole bereits enthalten sind um nicht ständig die ASCII-Werte im NUMLOCK eingeben zu müssen. Da ist das Klemmbrett schon komfortabler. Bei den Werten unter 32 wird es problematisch, da dies Sonderzeichen sind die gewisse Funktionen durchführen.

ASCIIFunktionASCIIFunktion
000-016-
001Cursor springt auf POS1017-
002Löscht rückwärts bis Zeilenanfang018Text-Editor: Ersetzen…
003-019Text-Editor: Suche…
004-020-
005Löscht bis Zeilenende021-
006-022-
007Text-Editor: Gehe zu Zeile…023Löscht bis Zeilenende
008Korrekturtaste, löscht ein Zeichen zurück024-
009TAB025-
010-026Springt zum Ende
011-027Esc
012Löscht gesamte Zeile028-
013Zeilenumbruch029-
014-030-
015-031-

Das Prompt

Ähnlich wie beim ECHO-Befehl (siehe oben) lassen sich ich beim PROMPT-Befehl die skurrilsten Eingabeaufforderungen gestalten:

PROMPTASCII-Werte
░▒▓176, 177, 178
═══>205, 205, 205, 041

Platzhalter (Wildcards)

Es gibt Programme die keine Platzhalter (* und ?) in Dateinamen bzw. keine Dateimasken akzeptieren. Hier schafft folgende Batch-Datei Abhilfe (MASKE.BAT):

@echo off
if %1==/? goto HILFE
if %1==. goto HILFE
if %2==. goto HILFE
@for %%a in (%2) do %1 %%a %3
goto ENDE
:HILFE
echo MASKE.BAT ermöglicht es Platzhalter
echo auch bei Programmen anzuwenden die
echo diese nicht unterstützen:
echo Syntax: MASKE [Programm [Dateimaske][/?]]
pause >nul
:ENDE

Ein Menü

Hier ein Beispiel wie man sich ein kleines Menü zurecht-batchen kann wenn man keinerlei Software hat. Leider gibt es keinen internen DOS-Befehl mit dem man Benutzereingaben abfragen kann. Dies kann nur die DOS-Befehlszeile. Deshalb muss die Eingabe des Benutzers als Dateiname vorhanden sein. Im folgenden Beispiel sind 6 mögliche Antworten des Benutzers vorgesehen. Wird die Batch-Datei gestartet so erzeugt sie weitere 6 kleine Batch-Dateien, eine für jede mögliche Antwort. Nach dem Verlassen des Menüs (Punkt 6) werden diese wieder gelöscht.

@echo off
if not %menop%==quit goto start
del ?.bat
set prompt=%prmpt%
set prmpt=
set menop=
cls
goto cmdlin
:start
cls
if exist 1.bat goto menu
set prmpt=%prompt%
echo wait 6
echo @echo off >1.bat
echo app /e >>1.bat
echo menu.bat >>1.bat
cls
echo wait 5
echo @echo off >2.bat
echo app /w >>2.bat
echo menu.bat >>2.bat
cls
echo wait 4
echo @echo off >3.bat
echo app /a >>3.bat
echo menu.bat >>3.bat
cls
echo wait 3
echo @echo off >4.bat
echo app /d >>4.bat
echo menu.bat >>4.bat
cls
echo wait 2
echo @echo off >5.bat
echo app /c >>5.bat
echo menu.bat >>5.bat
cls
echo wait 1
echo @echo off >6.bat
echo set menop=quit >>6.bat
echo menu.bat >>6.bat
cls
:menu
echo ╔═══ MENU ════════════════════════════╗
echo ║ 1. Text-editor       4. Diary       ║
echo ║ 2. Worksheet         5. Calculator  ║
echo ║ 3. Address-book      6. Quit        ║
echo ╚═════════════════════════════════════╝
prompt=your choice:
:cmdlin

Sobald sie das Menü und die Eingabeaufforderung sehen haben sie die Batch-Datei bereits verlassen und befinden sich in der DOS-Befehlszeile. Starten sie das Programm deshalb auch nur von der Befehlszeile, nicht vom Filemanager. Die Eingabeaufforderung ist eigentlich das DOS-Prompt, dass entsprechend geändert wurde. Geben sie nun eine der Ziffern zwischen 1 und 6 und ein, drücken sie Enter und die entsprechende, von der Batch-Datei erzeugte Antwort-Datei wird aufgerufen. Hier werden die erwünschten Tätigkeiten abgearbeitet und die Menü-Batch-Datei ein weiteres mal gestartet (nennen wir sie MENU.BAT). Das DOS-Prompt bleibt solange geändert bis sie Menü-Punkt 6 (Quit) gewählt haben. Tun sie dies, so werden die Antwort-Dateien (1.BAT bis 6.BAT) gelöscht und die Eingabeaufforderung in den ursprünglichen Zustand zurückgesetzt.