Aktionen

Windows:Batch / DOS-Box: aktuelles Datum und Uhrzeit für Datei- oder Verzeichnisnamen verwenden

Aus znilwiki

Zum Beispiel bei Dateisicherungen per Skript / Batch ist es praktisch, das aktuelle Datum und Uhrzeit in Batch-Dateien verwenden zu können.
Auch bei Ausgaben in Log-Dateien macht sich das gut.


Simpel-Ausgabe

Die 08/15 Ausgabe besteht aus dem Inhalt der beiden Umgebungsvariablen

%TIME%
%DATE%

Per echo in einer Eingabeaufforderung sieht das so aus:
Batch-DatumundUhrzeit-001.png

Wie Ihr seht habe ich auch gleich einen Ordner mit dem aktuellen Datum angelegt.
Leider geht das mit der Uhrzeit schon nicht mehr - da sind Doppelpunkte drin, die darf es in Dateinamen nicht geben.

Aber auch dafür gibt es eine Lösung - siehe nächsten Abschnitt:


Getrennte Ausgabe von Tag, Monat, Jahr, Stunde, Minute und Sekunde

Was leider in der aktuellen Hilfe praktisch nicht mehr zu finden ist: Windows kann die Ausgabe von Umgebungsvariablen Formatieren.
Das können wir nutzen um die Ausgabe von %TIME% und %DATE% in ihre Einzelteile zu zerlegen:

Jahr:      %date:~-4%
Monat:     %date:~-7,2%
Tag:       %date:~-10,2%

Stunden:   %time:~-11,2%
Minuten:   %time:~-8,2%
Sekunden:  %time:~-5,2% 

Ein

%date:~-4%-%date:~-7,2%-%date:~-10,2%---%time:~-11,2%-%time:~-8,2%-%time:~-5,2%

gibt uns Datum und Uhrzeit in einer Verzeichnis- und Dateinamen kompatiblen Version aus - die dann schön nach Datum sortiert wird, mit

mkdir %date:~-4%-%date:~-7,2%-%date:~-10,2%---%time:~-11,2%-%time:~-8,2%-%time:~-5,2%

erstellen wir uns ein Verzeichnis damit:
Batch-DatumundUhrzeit-002.png

--Bernhard Linz (Diskussion) 12:20, 11. Mai 2012 (CEST)


Fehler durch Leerzeichen

Ich habe da gerade noch einen Fehler gefunden - die Uhrzeit oder das Datum ist bei den Zahlen von 1 bis 9 nur einstellig.
Wir bekommen also ein

echo ##%TIME%##
## 9:45:35,88##

und damit auch ein

echo =>%time:~-11,2%-%time:~-8,2%-%time:~-5,2%<=
## 9-45-35##

Beim Datum ist es das selbe. Nun haben wir plötzlich Leerzeichen in den Dateinamen.
Lösung1: Die Namen in der Batch in " " packen und damit die Leerzeichen übergeben
Lösung2: Aus allen Leerzeichen hinterher 0 - machen:

set TEST=%date:~-4%-%date:~-7,2%-%date:~-10,2%-%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
echo ##%TEST%##
setlocal enabledelayedexpansion
set TEST=!TEST:^ =0!
setlocal disabledelayedexpansion
echo ##%TEST%##

Ausgabe:

##2012-05-12- 1-47-00##
##2012-05-12-01-47-00##

er füllt die Leerzeichen mit der Zahl 0 !

Important.png
Hinweis: Das Umwandeln aller Leerzeichen in eine 0 funktioniert nur innerhalb einer Batch-Datei. Man kann es NICHT in der Eingabeaufforderung testen! Kopiert das Beispiel in eine Textdatei und speichert diese als .bat oder .cmd und ruf diese dann auf - dann geht es.


--Bernhard Linz (Diskussion) 01:48, 12. Mai 2012 (CEST)


Kommentare

Loading comments...