SETWORD.COM - Erweiterung zur Batch Programmierung Verfasst am: 26.06.2009, 17:32
Haeufigstes Problem bei der Programmierung von Batch-Ablaeufen
ist die Verwendung von System- und Datei-Informationen: Tagesdatum
und Uhrzeit, Volume Label, aktuelles Verzeichnis oder Laufwerk,
Verzeichnispfad einer Datei, Dateidatum und so weiter.
DOS bietet hier leider keine fertigen Loesungen an. Sofern man
nicht mit 4DOS arbeitet, gibt es folgende Moeglichkeiten:
(1) reine Batchloesungen, die meist recht aufwendig und schwer
zu durchschauen sind,
(2) kleine Utilities, von denen sich mit der Zeit eine ganze
Menge ansammeln,
(3) Multifunktionsprogramme, also eine Zusammenfassung vieler
Utilities in einem Programm.
Hier soll eine Loesung vorgestellt werden, die eine Mischung aus
allen dreien ist. Dazu wird ein kleines Programm (SETWORD.COM)
in Verbindung mit normalen DOS-Funktionen und Umleitungen/PIPEs
eingesetzt, so dass auch ein Lerneffekt fuer diesen Batchkurs
dabei abfaellt. Das noetige Programmm wird (als "DEBUG-Skript",
s.u.) gleich mitgeliefert.
SETWORD.COM liest per PIPE (|) den DOS-Output von Befehlen wie
DIR, VOL, DATE, TIME etc. und entnimmt daraus das soundsovielte
Wort - auch ueber mehrere Zeilen hinweg! Die Position des Wortes
(1...) wird zu SETWORD angegeben - ohne Angabe gilt 1. Beispiel:
VOL A: | SETWORD 6
Der Befehl VOL liefert z.B. (bitte nachzaehlen):
Datentraeger in Laufwerk A ist FD-BACKUP
Damit nun das Wort im BAT-Ablauf verwendet werden kann, schreibt
SETWORD einen entsprechenden SET-Befehl (per > Umleitung) in eine
temporaere BAT-Datei, die dann per CALL ausgefuehrt wird. Dabei
wird noch der gewuenschte Name der Variablen als Befehlsparameter
uebergeben. Das Ganze sieht dann so aus:
VOL A: | SETWORD 6 > TMP.BAT
call TMP.BAT LABEL
:: ^^^^^--------- Name der Variablen
Nun kann %LABEL% abgefragt oder sonstwie verwendet werden.
Der SET-Befehl wird von SETWORD natuerlich immer mit %1 anstelle
des Variablen-Namens produziert, z.B.:
SET %1=FD-BACKUP
Ohne Umleitung der Ausgabe erscheint der SET-Befehl auf dem Bildschirm
- zum Testen genau das Richtige. Ausprobieren:
VOL | SETWORD 4 (aktuelles Laufwerk)
CD | SETWORD 1 (aktuelles Verzeichnis)
DIR Datei | SETWORD 11 (Pfad einer Datei)
TRUENAME Datei | SETWORD (Datei mit komplettem Pfad)
Und was passiert, wenn SETWORD keine Eingabe per PIPE erhaelt?
Dann wird die Eingabe halt von der Tastatur eingelesen (!), z.B.:
SETWORD > TMP.BAT
call TMP.BAT INPUT
Verzeichnis der TMP.BAT
In den Beispielen wurde die TMP.BAT im aktuellen Verzeichnis
angelegt, und sollte daher anschliessend noch geloescht werden.
Das kann man sich sparen, wenn immer das Verzeichnis %TEMP%
verwendet wird, z.B.:
CD | SETWORD > %temp%\TMP.BAT
call %temp%\TMP UDIR
Zum Programm SETWORD
Als Trennzeichen zwischen Woertern in der Eingabedatei gelten
Leerzeichen, Komma, Semikolon und CR,LF (Zeilenabschluss). Max.
Groesse der Datei: 60 KB, Position gueltig von 1 bis 65535
Weitere Anwendungen
DIR liefert eine Menge Informationen. Neben dem aktuellen Laufwerk
kann fuer jede beliebige Datei z.B. der Verzeichnispfad, der Name
ohne Extension, nur Extension, Datei-Datum und -Groesse ermittelt
werden. Bei Bedarf laesst sich auch eine bestimmte Zeile per FIND
herausziehen (hier um die Anzahl Dateien zu ermitteln):
DIR *.GIF | FIND "Datei(en)" | SETWORD 1
Bei DATE und TIME haelt DOS an und wartet auf eine Eingabe oder
RETURN. Dieses RETURN wird daher per ECHO an DATE/TIME gepiped:
ECHO.| DATE | SETWORD 4
DOS-Version
Die Beispiele oben gelten fuer MS-DOS 5.0 (deutsch). Abweichungen
im Output bei anderen Versionen moeglich, also bitte ausprobieren
und abzaehlen...
Und hier ist das Proggi:
Code:
nSETWORD.COM
e0100 BE 81 00 AC 3C 20 74 FB 4E 2B C0 2A FF B9 0A 00
e0110 8A 1C 46 80 EB 30 80 FB 09 77 06 F7 E1 01 D8 73
e0120 EF 85 C0 74 01 48 50 BE A2 01 2B DB 89 F2 B9 00
e0130 F0 B4 3F CD 21 8B D8 C6 00 1A BA 9B 01 BB 01 00
e0140 B9 07 00 B4 40 CD 21 5D 2B C9 AC 3C 20 74 FB 3C
e0150 2C 74 F7 3C 3B 74 F3 3C 0D 74 EF 3C 0A 74 EB 4E
e0160 89 F2 80 3C 1A 74 1E 46 8A 04 3C 20 74 10 3C 2C
e0170 74 0C 3C 3B 74 08 3C 0D 74 04 3C 0A 75 E4 3B CD
e0180 74 03 41 EB C5 3B CD 75 08 8B CE 29 D1 B4 40 CD
e0190 21 B4 3E CD 21 2A C0 B4 4C CD 21 73 65 74 20 25
e01A0 31 3D
rCX
A2
w
q
Das Skript enthaelt den kompletten Programm-Code als Folge von
(hex) Bytes mit den zugehoerigen Eingabebefehlen fuer DEBUG.
Zur Erstellung der COM-Datei bitte wie folgt vorgehen:
* Skript zwischen den Trennlinien ausschneiden und in eine Datei
kopieren, z.B. SETWORD.SCR
* Auf der Befehlsebene eingeben: DEBUG < SETWORD.SCR
Die Eingabe-Datei wird damit von DEBUG abgearbeitet, und das
Resultat wird in die Datei SETWORD.COM (ins aktuelle Verzeichnis)
geschrieben. _________________