Dies ist eine alte Version des Dokuments!
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 eineige 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 Pararmeter übergeben wurde.
IF %1== GOTO ENDE
funktioinert 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, daß 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
nimmt man den „.“ als Kettenglied:
IF %1.==. GOTO ENDE
Wurde kein Parameter übergeben verzweigt die Batchdatei zur Sprungmarke ENDE.
Das selbe 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ärend 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, daß 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 muß man nicht auf eine etwas ansprechendere Bildschirmausgabe verzichten. Auch der Befehl ECHO kann so Manches ausgeben wenn man es ihm entsprechend übergibt. Wenn NUMLOCK eingaschaltet ist kann man ASCII-Codes als dreistellige Zahl eingeben. So kann man mit ECHO Grafikzeichen verwenden.
Beispiel:
Beginnen sie eine Batch-Datei wie gewöhnlich im Text-editor 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ärend 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ärend sie J 77 nacheinander eingeben. Als letztes das Zeichen „░“: J 7O, also ASCII-Code 176.
Die Batch-Datei müßte 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:
Symbol | ASCII | |
---|---|---|
╔ | 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.
ASCII | Funktion | ASCII | Funktion | |
---|---|---|---|---|
000 | - | 016 | - | |
001 | Cursor springt auf POS1 | 017 | - | |
002 | Löscht rückwärts bis Zeilenanfang | 018 | Text-Editor: Erstzen… | |
003 | - | 019 | Text-Editor: Suche… | |
004 | - | 020 | - | |
005 | Löscht bis Zeilenende | 021 | - | |
006 | - | 022 | - | |
007 | Text-Editor: Gehe zu Zeile… | 023 | Löscht bis Zeilenende | |
008 | Korrekturtaste, löscht ein Zeichen zurück | 024 | - | |
009 | TAB | 025 | - | |
010 | - | 026 | Springt zum Ende | |
011 | - | 027 | Esc | |
012 | Löscht gesmate Zeile | 028 | - | |
013 | Zeilenumbruch | 029 | - | |
014 | - | 030 | - | |
015 | - | 031 | - |
Das Prompt
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. 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= goto cmdlin :start set prmpt=%prompt% cls if exist 1.bat goto menu if exist 6.bat del 6.bat 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