Dieter Schmitz von der sepago hat neulich ein interessantes und umfangreiches Batch veröffentlicht, das die aktuelle Systemzeit in einem definierten Format ausgibt. Das ist deshalb nützlich, weil die Datumsfunktion der “klassischen” Windows-Shell leider abhängig von den Landeseinstellungen das Datum in unterschiedlichen Formaten ausgibt. Dadurch kann man das Datum nur schlecht weiterverwenden.
Dieters Lösung geht dabei rein mit Batch-Mitteln sehr sorgfältig vor und liest die Ländereinstellung aus der Registry, um davon abhängig das Datum korrekt auszulesen und in einem vordefinierten Format auszugeben. Hier sein Artikel:
[Datumsformat mittels CMD definiert ausgeben | sepago]
http://www.sepago.de/d/dieter/2013/12/17/datumsformat-korrekt-darstellen
Wie man sieht, ist sein Code sehr umfangreich. Mit etwas Trickserei lässt sich die Aufgabe mit weniger Code lösen – allerdings dann nicht mehr “rein” mit Batch-Mitteln. Die folgende Lösung macht einen Ausflug in VBScript, das auf allen Windows-Versionen seit Windows 2000 vorhanden ist. Damit dürfte es keine Kompatibilitätsnachteile geben.
@ECHO OFF REM simple method to get the date in ISO format SET DateTempFile=%RANDOM%Temp.vbs CD %0\.. ECHO dtmNow = Now()>%DateTempFile% ECHO strDate = Year(dtmNow) ^& Right("0" ^& Month(dtmNow),2) ^& Right("0" ^& Day(dtmNow), 2)>>%DateTempFile% ECHO WScript.Echo strDate>>%DateTempFile% FOR /F " usebackq delims==" %%a IN (`@CSCRIPT //NOLOGO %DateTempFile%`) DO ( SET MyDate=%%a ) ECHO %MyDate% DEL %DateTempFile%
Der etwas “schmutzige” Trick besteht darin, den VBScript-Code zur Laufzeit in eine temporäre Datei zu schreiben und diese dann auszuführen. Der wichtige Teil des Codes steht dabei in der Zeile, die mit “ECHO strDate” beginnt: Er setzt die Teile des Datums nach dem ISO-Prinzip zusammen (Jahr – Monat – Tag, hier der Einfachheit halber ohne Trennzeichen), sodass aus dem 16. April 2014 der Wert “20140416” wird. Wer ein anderes Format möchte, ändert diese Zeile. Vorsicht: Das &-Zeichen muss in einem Batch per Caret ^ maskiert werden.
Das ISO-Format mit Bindestrichen erhält man etwa so:
ECHO strDate = Year(dtmNow) ^& "-" ^& Right("0" ^& Month(dtmNow),2) ^& "-" ^& Right("0" ^& Day(dtmNow), 2)>>%DateTempFile%
Und so lässt sich das Skript dann in einem Batch einsetzen, um etwa einen Ordner mit dem aktuellen Datum zu benennen:
SET DateTempFile=%RANDOM%Temp.vbs CD %0\.. ECHO dtmNow = Now()>%DateTempFile% ECHO strDate = Year(dtmNow) ^& Right("0" ^& Month(dtmNow),2) ^& Right("0" ^& Day(dtmNow), 2)>>%DateTempFile% ECHO WScript.Echo strDate>>%DateTempFile% FOR /F " usebackq delims==" %%a IN (`@CSCRIPT //NOLOGO %DateTempFile%`) DO ( SET MyDate=%%a ) DEL %DateTempFile% SET folder=Ordner-%MyDate% IF NOT EXIST %folder% MD %folder%
Hier noch die Skript-Fragmente als Download:
Batch-ISODate (770 bytes, 1.291-mal heruntergeladen, letzte Änderung am 1. Dezember 2014)
http://faq-o-matic.net/?p=5833