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.


1 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:


2 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)


3 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)


4 Kommentare

Anonymer Benutzer #1

111 Monaten zuvor
Punktzahl 0++

Super Lösung, danke für den Tipp, vor allem auch das Umwandeln der Leerstelle in eine Null !

Günter

Anonymer Benutzer #2

107 Monaten zuvor
Punktzahl 0++
unter Windows 7 will das nicht mehr so recht funktionieren, das steht dann "set TEST= Missing operator"

Anonymer Benutzer #2

107 Monaten zuvor
Punktzahl 0++
sorry "missing operand"

BLinz

107 Monaten zuvor
Punktzahl 0++

Also ich habe das unter Windows 7 und unter Windows Server 2008 R2 ohne Probleme am laufen.

Das funktioniert nur innerhalb einer Batchdatei, nicht beim Schritt für Schritt ausführen in der Eingabeaufforderung

Wolfgang

56 Monaten zuvor
Punktzahl 0 Du

Unter Windows 10 versehe ich mit folgendem Ausdruck eine Datei mit Datum und Uhrzeit. Funktioniert einwandfrei.

rename Solardaten.csv "%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%-%"Solardaten.csv

BLinz

56 Monaten zuvor
Punktzahl 0++
Die Aufwendige Lösung kommt ja auch nur durch die Leerzeichen-Geschichte zu Stande. Du lebst in deinem Beispiel damit :-)

Anonymer Benutzer #4

46 Monaten zuvor
Punktzahl 0 Du
Vielen Dank! :-)

Alex

42 Monaten zuvor
Punktzahl 0 Du
Vielen Dank!

Anonymer Benutzer #6

41 Monaten zuvor
Punktzahl 0 Du

Besten Dank auch von mir!

Das ist sehr hilfreich für mich gewesen.

Anonymer Benutzer #7

41 Monaten zuvor
Punktzahl 0 Du

Toll!!!!!

Aber bei Windows 10 klappt es auch ohne Null-Ersetzung! jedenfalls bei mir!

Anonymer Benutzer #8

39 Monaten zuvor
Punktzahl 0 Du
Super Danke

Michael

18 Monaten zuvor
Punktzahl 0 Du
Auch heute noch hilfreich - danke!

Carlos

16 Monaten zuvor
Punktzahl 0 Du
Super ... vielen Dank :-)

Hani

14 Monaten zuvor
Punktzahl 0 Du
Super Tipp, v.a. das mit der Leerzeichenumwandlung.

Anonymer Benutzer #12

14 Monaten zuvor
Punktzahl 0 Du
Danke fürden Hinweis - hat bei der erstellung für meinen Recorder weiter geholfen das Aufnahmescript ein wenig Angepasster zu gestalten.

Reneyel

5 Monaten zuvor
Punktzahl 0 Du
Danke! Klasse Hilfe :-) Funktioniert bei mir auch auf einem "Windows Server 2012R2" (20Jun2021)

Anonymer Benutzer #14

2 Monaten zuvor
Punktzahl 0 Du
Hallo! Ich müsste 2 Verzeichnisse um eine bestimmte Uhrzeit synchronisieren, kann mir wer helfen?

mastadook@gmx.de

einem Monat zuvor
Punktzahl 0 Du

Vielen Dank für die Tipps, besonders das mit den Leerzeichen war mir wichtig.

Funktioniert prima natürlich auch unter Server 2016
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen. Bei einem Kommentar wird deine IP-Adresse zusammen mit dem Text, den angegebenen Namen bzw. der Email-Adresse in der Datenbank für die Kommentare dauerhaft gespeichert. Genaueres kannst du hier nachlesen: Datenschutzerklärung

______________________________________________________

Bitte beachte das der eingetragene Name oder die Email-Adresse für jeden sichtbar ist!