Logo faq-o-matic.net
Logo faq-o-matic.net

Datum im Batch mit Standardformat nutzen

von veröffentlicht am28. April 2014, 06:03 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Batch, VBScript   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 1. Dezember 2014

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:

Download: Batch-ISODate  Batch-ISODate (770 bytes, 649-mal heruntergeladen, letzte Änderung am 1. Dezember 2014)

© 2005-2019 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!