Wer schon einmal unter MS-DOS eine Batchdatei geschrieben hat, kennt sicher das folgende Problem:
Innerhalb des Namens einer neuen Logdatei und in allen zugehörigen Protokolleinträgen hätte man gerne das jeweils aktuelle Datum sowie die gültige Uhrzeit enthalten.
So einfach diese Problemstellung auch klingen mag, unter MS-DOS ist die Lösung doch nicht auf den ersten Blick erkennbar. Aus diesem Grund scheitern viele Anwender daran und lassen diese Angaben einfach weg. Dies führte natürlich oft dazu, dass bestehende Logdateien überschrieben wurden und Einträge darin nicht genau zuordenbar waren.
Wer aber in Zukunft eine Lösung dafür haben will, liest hier einfach weiter...
Das Datum und MS-DOS Batchdateien
Unter MS-DOS kann das Datum mittels des Befehles des 'date' und die Uhrzeit mit dem Befehl 'time' abgefragt und gesetzt werden.
Ein erstes Problem, das einem hier begegnet, ist die Tatsache, dass beide Befehle als erstes standardmäßig eine Benutzereingabe fordern. Das ist in einer Batchdatei natürlich etwas hinderlich:
C:\>date
Aktuelles Datum: 25.05.2009
Geben Sie das neue Datum ein: (TT-MM-JJ)<RET>
C:\>time
Aktuelle Zeit: 14:40:32,93
Geben Sie die neue Zeit ein:<RET>
Umgehen kann man diese interaktive Eingabe mit der Befehlsoption /T:
C:\>date /t
25.05.2009
C:\>time /t
14:40
Für die einmalige Ausgabe des Datums und der Uhrzeit kann dies bereits genügen. Mit der Zuweisung dieser Werte an eine Variable tut man sich schwer:
C:\>set v_date=date /t
C:\>echo %v_date%
date /t
Damit ist diese Möglichkeit innerhalb einer Batchdatei leider nicht zu gebrauchen.
Wenn die Befehlszeilenerweiterung von MS-DOS aktiviert ist (bei Windows 2000 und höher ist diese Einstellung der Standard) gibt es noch die Möglichkeit die dynamischen Umgebungsvariablen %DATE% und %TIME% zu verwenden. Diese beide Variablen lassen sich sehr einfach verwenden und eigenen Variablen zuweisen.
C:\>echo %DATE%
25.05.2009
C:\>set v_date=%DATE%
C:\>echo %v_date%
25.05.2009
C:\>echo %TIME%
14:40:45,45
In vielen Fällen benötigt man aber das Format dieser Werte jedoch anders. Leider ist man hierbei nicht sehr frei in der Gestaltung. Man kann aber einzelne "Felder" wie Tag, Monat, Jahr, Stunde etc. extrahieren und neu zusammenstellen. Etwas umständlich, aber man erhält dadurch in der Regel auch das gewünschte Ergebnis:
C:\>echo %date%
25.05.2009
C:\>set v_tag=%date:~0,2%
C:\>echo %v_tag%
25
C:\>set v_monat=%date:~3,2%
C:\>echo %v_monat%
05
C:\>set v_jahr=%date:~6,4%
C:\>echo %v_jahr%
2009
C:\>set v_datum=%v_jahr%%v_monat%%v_tag%
C:\>echo %v_datum%
20090525
C:\>set v_time=%TIME%
C:\>echo %v_time%
14:40:45,45
C:\>set v_stunde=%v_time:~0,2%
C:\>echo %v_stunde%
14
C:\>set v_minute=%v_time:~3,2%
C:\>echo %v_minute%
40
C:\>set v_sekunde=%v_time:~6,2%
C:\>echo %v_sekunde%
45
C:\>set v_uhrzeit=%v_stunde%%v_minute%%v_sekunde%
C:\>echo %v_uhrzeit%
144045
Und mit diesen Möglichkeiten lassen sich nun Ausgaben in Logdateien mit aktuellem Datum und Uhrzeit versehen. Auch dynamisch generierte Dateinamen stellen nun kein Problem mehr dar:
C:\>set v_logfile=filename_%v_datum%%v_uhrzeit%.log
C:\>echo %v_logfile%
filename_20090525144045.log
C:\>echo -E- %DATE% %TIME% : Fehlertext_1 >> %v_logfile%
C:\>echo -E- %DATE% %TIME% : Fehlertext_2 >> %v_logfile%
C:\>REM Mal sehen, ob der richtige Text auch drinsteht:
C:\>type %v_logfile%
-E- Mo 25.05.2009 14:45:18,26 : Fehlertext_1
-E- Mo 25.05.2009 14:45:18,28 : Fehlertext_2
Neben den hier aufgezeigten Möglichkeiten, gibt es natürlich noch viele weitere versteckte Details, um auch unter MS-DOS so zu programmieren, wie wir es unter Unix/Linux schon seit jeher gewohnt sind.
Weitere Informationen zum Thema Skripting erhalten Sie auf unseren Skript-Seiten oder einem IT-Consultant Ihres Vertrauens.
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.