In einem Windows-Batch-Skript (Windows XP) muss ich das aktuelle Datum und die aktuelle Uhrzeit für die spätere Verwendung in Dateinamen usw. formatieren.
Es ähnelt der Frage zum Stapelüberlauf, wie ein Datum in Batchdateien angehängt wird , jedoch auch mit der Zeit.
Ich habe das bisher:
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
was gibt:
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
Gibt es eine Möglichkeit, eine einstellige Stunde in% TIME% zuzulassen, damit ich Folgendes erhalten kann?
2009_07_28__08_36_01
windows
datetime
formatting
batch-file
laurie
quelle
quelle
datetimef
Variablen ersetzen und stattdessen Nullen setzen. In Ihrem Beispiel:SET datetimef=%datetimef: =0%
Antworten:
Am Ende hatte ich dieses Skript:
:: Auf WIN2008R2 musste ich zB Ihren 'eingestellten Monat =% Datum: ~ 3,2%' wie unten festlegen :: andernfalls erscheint 00 für MONAT
quelle
quelle
So generiere ich einen Protokolldateinamen (basierend auf http://ss64.com/nt/syntax-getdate.html ):
quelle
Normalerweise mache ich das immer so, wenn ich eine Datums- / Zeitzeichenfolge benötige:
Dies gilt für das deutsche Datums- / Uhrzeitformat (TT.MM.JJJJ HH: MM: SS). Grundsätzlich verkette ich die Teilzeichenfolgen und ersetze schließlich alle Leerzeichen durch Nullen.
Kurze Erklärung der Funktionsweise von Teilzeichenfolgen:
Um nur das Jahr von einem Datum wie "29.03.2018" zu erhalten, verwenden Sie:
quelle
Wenn PowerShell installiert ist, können Sie Datum und Uhrzeit einfach und zuverlässig in jedem gewünschten Format abrufen, zum Beispiel:
Natürlich ist PowerShell heutzutage immer installiert, aber unter Windows XP möchten Sie diese Technik wahrscheinlich nur verwenden, wenn Ihr Batch-Skript in einer bekannten Umgebung verwendet wird, in der Sie wissen, dass PS verfügbar ist (oder überprüfen Sie Ihre Batch-Datei, wenn PowerShell verfügbar ist ...)
Sie mögen sich vernünftigerweise fragen: Warum überhaupt eine Batch-Datei verwenden, wenn Sie PowerShell verwenden können, um Datum und Uhrzeit abzurufen, aber ich denke, einige offensichtliche Gründe sind: (a) Sie sind mit PowerShell nicht allzu vertraut und bevorzugen es immer noch, die meisten zu tun Dinge auf altmodische Weise mit Batch-Dateien oder (b) Sie aktualisieren ein altes Skript und möchten nicht das Ganze auf PS portieren.
quelle
Ich bin heute auf dieses Problem gestoßen und habe es gelöst mit:
Es ersetzt Leerzeichen durch Nullen und füllt die Stunde im Grunde genommen mit Nullen auf.
Nach einer kurzen Suche fand ich nicht heraus, ob Befehlserweiterungen erforderlich waren (funktionierte immer noch mit SETLOCAL DISABLEEXTENSIONS).
quelle
:
)?echo %TIME: =:%
aber wenn es nicht so ist, versuche vielleicht, dem:
mit einem^
Like zu entkommenecho %TIME: =^:%
(was auch bei mir funktioniert).Wie bereits erwähnt, ist das Parsen von Datum und Uhrzeit nur dann sinnvoll, wenn Sie das vom aktuellen Benutzer verwendete Format kennen (z. B. MM / TT / JJ oder TT-MM-JJJJ, um nur zwei zu nennen). Dies könnte festgestellt werden, aber wenn Sie alle Belastungen und Analysen durchführen, werden Sie immer noch in einer Situation sein, in der ein unerwartetes Format verwendet wird und weitere Optimierungen erforderlich sind.
Sie können auch ein externes Programm verwenden, das einen Datums-Slug in Ihrem bevorzugten Format zurückgibt. Dies hat jedoch die Nachteile, dass das Dienstprogramm mit Ihrem Skript / Stapel verteilt werden muss.
Es gibt auch Batch-Tricks, bei denen die CMOS-Uhr ziemlich roh verwendet wird, aber das ist für die meisten Menschen zu nahe an bloßen Drähten und auch nicht immer der bevorzugte Ort, um Datum und Uhrzeit abzurufen.
Im Folgenden finden Sie eine Lösung, mit der die oben genannten Probleme vermieden werden. Ja, es werden einige andere Probleme eingeführt, aber für meine Zwecke war dies die einfachste, klarste und portabelste Lösung zum Erstellen eines Datenstempels in .bat-Dateien für moderne Windows-Systeme. Dies ist nur ein Beispiel, aber ich denke, Sie werden sehen, wie Sie andere Datums- und / oder Zeitformate usw. ändern können.
quelle
reg query "HKCU\Control Panel\International" /v sShortDate
Teil verwenden, ohne die Registrierungseinstellung zu ändern (Übung dem Leser überlassen!).Das Folgende ist möglicherweise keine direkte, sondern eine enge Antwort?
Zumindest kann es inspirierend sein.
quelle
Wenn Sie dieses Format nicht genau benötigen:
Dann könnten Sie die folgenden 3 Codezeilen verwenden, die% date% und% time% verwenden:
Hinweis: Die Zeichen
/
und:
werden entfernt und das Zeichen.
und das Leerzeichen werden durch einen Unterstrich ersetzt.Beispielausgabe (aufgenommen am Mittwoch, den 05.08.15 um 12:49 Uhr mit 50 Sekunden und 93 Millisekunden):
quelle
quelle
Die
offset:length
Formatierung, die mit demSET
Befehl in Windows unterstützt wird, ermöglicht es Ihnen nicht, das zu füllen,0
wie Sie anscheinend interessiert sind.Sie können jedoch ein BATCH-Skript codieren, um zu überprüfen, ob die Stunde kleiner als ist,
10
undentsprechend mit einer anderen
echo
Zeichenfolge auffüllen.Unter diesem Link finden Sie einige Informationen zum
SET
Befehl .Sie können auch zu anderen Programmiermethoden wechseln, um hierher zu gelangen.
In Unix-Bash (verfügbar mit Cygwin unter Windows) ist es ganz einfach zu sagen:
Und es polstert immer richtig.
quelle
Ich habe es so gemacht:
quelle
Die erste Zeile wird immer in diesem Format ausgegeben, unabhängig von der Zeitzone:
20150515150941.077000 + 120
So können Sie die Ausgabe nur so formatieren, dass sie Ihren Wünschen entspricht.
quelle
Diese bat-Datei (als datetimestr.bat speichern) erzeugt die datetime-Zeichenfolge dreimal: (1) lange datetime-Zeichenfolge mit Wochentag und Sekunden, (2) kurze datetime-Zeichenfolge ohne diese und (3) kurze Version des Codes.
Um die richtige Anerkennung zu finden, habe ich die Konzepte von Peter Mortensen (18. Juni 14 um 21:02 Uhr) und Opello (25. August 11 um 14:27 Uhr) zusammengeführt.
Sie können dies viel kürzer schreiben, aber diese lange Version erleichtert das Lesen und Verstehen des Codes.
quelle
Ich bin wirklich neu in Batch-Dateien und das ist mein Code! (Ich bin nicht sicher warum, aber ich konnte nicht kombinieren Datum / t und Zeit / t zusammen und ich konnte nicht verwenden % date% und % time% direkt , ohne eine Variable ...)
Es wird von anderen wiederverwendet (die Frage war, ein formatiertes Zeitdatum als Dateinamen zu erhalten).
quelle
Es gibt noch eine andere einfache Möglichkeit:
quelle
Um einen
YYYY-MM-DD hh:mm:ss
(24-Stunden-) Zeitstempel zu generieren, verwende ich:quelle
%TIME%
und%DATE%
Variablen verwenden dasselbe Format wie dieTIME
undDATE
Befehle, respectively. Auf meinem System stimmen die Variablen nicht mit meinen regionalen Einstellungen überein.Dieses Batch-Skript macht genau das, was das OP will (getestet unter Windows XP SP3).
Ich habe auch diesen cleveren Registrierungstrick verwendet, der zuvor von "jph" beschrieben wurde. IMHO ist der einfachste Weg, um
"yyyy_MM_dd"
auf jedem neuen oder alten Windows-System eine 100% konsistente Formatierung des Datums zu erreichen . Die Änderung an einem Registrierungswert ist sofort vorübergehend und trivial. Es dauert nur einige Millisekunden, bevor es sofort wieder zurückgesetzt wird.Doppelklicken Sie auf diese Batchdatei, um eine sofortige Demo zu erhalten. Das Eingabeaufforderungsfenster wird angezeigt und zeigt Ihren Zeitstempel an. . . . .
quelle
quelle
Erstellen Sie eine Datei mit dem Namen "search_files.bat" und platzieren Sie den folgenden Inhalt in der Datei. Doppelklicken Sie dann darauf. Die temporäre Variable% THH% wurde eingerichtet, um den AM angemessen zu behandeln. Wenn die ersten beiden Ziffern der Zeit eine 0 enthalten, ignoriert Windows den Rest des Dateinamens der LOG-Datei.
quelle
Ich mag die Kurzversion über @The lorax, aber für andere Spracheinstellungen kann es etwas anders sein.
In deutschen Spracheinstellungen (mit natürlichem Datumsformat: TT.MM.JJJJ) muss beispielsweise die Monatsabfrage von 4,2 auf 3,2 geändert werden:
quelle
Das sind meine 2 Cent für a
datetime string
. BeiMM DD YYYY
Systemen wechseln Sie den ersten und den zweiten%DATE:~
Eintrag.quelle
Ich habe die akzeptierte Antwort ausprobiert und sie funktioniert ziemlich gut. Leider scheint das US-Zeitformat H: MM: SS.CS zu sein, und die fehlende 0 auf der Vorderseite verursachte vor 10 Uhr Analyseprobleme. Um diese Hürde zu überwinden und auch das Parsen der meisten Weltzeitformate zu ermöglichen, habe ich mir diese einfache Routine ausgedacht, die anscheinend recht gut funktioniert.
Das Schöne an dieser Routine ist, dass Sie die Zeitzeichenfolge als ersten Parameter und den Namen der Umgebungsvariablen übergeben, für die Sie die Zeit (in Centisekunden) als zweiten Parameter enthalten möchten. Beispielsweise:
(* Chris *)
quelle
Vielleicht so etwas:
quelle
Verwenden Sie in solchen Situationen einen einfachen Standard-Programmieransatz: Anstatt eine unbekannte Entität mit großem Aufwand zu analysieren, speichern Sie einfach die aktuelle Konfiguration, setzen Sie sie auf einen bekannten Status zurück, extrahieren Sie die Informationen und stellen Sie den ursprünglichen Status wieder her. Verwenden Sie nur Standard-Windows-Ressourcen.
Insbesondere werden die Datums- und Uhrzeitformate unter dem Registrierungsschlüssel HKCU \ Control Panel \ International \ in [MS-Definition] "values": "sTimeFormat" und "sShortDate" gespeichert. Reg ist der Konsolenregistrierungseditor, der in allen Windows-Versionen enthalten ist. Erhöhte Berechtigungen sind nicht erforderlich, um den HKCU-Schlüssel zu ändern
Einfach, unkompliziert und sollte für alle Regionen funktionieren.
Ich verstehe Aus Gründen nicht, die „SShortDate“ Wert Zurücksetzen wird sofort wirksam in einem Konsolenfenster , aber die sehr ähnlich „sTimeFormat“ Wert Neueinstellung ist nicht wirksam , bis ein neues Konsolenfenster geöffnet wird. Das einzige, was geändert werden kann, ist das Trennzeichen - die Ziffernpositionen sind festgelegt. Ebenso soll das Zeit-Token "HH" führenden Nullen vorangestellt werden, tut dies jedoch nicht. Glücklicherweise sind die Problemumgehungen einfach.
quelle
sTimeFormat
Zeitformats ist nutzlos . Nee.for /f "delims=" %%G in ('cmd /C echo SET "DateTime=%%date%%__%%time%%"') do %%G
Dieses Skript verwendet eine WMI-Schnittstelle, auf die primär über das WMIC-Tool zugegriffen wird, das seit Windows XP Professional ein wesentlicher Bestandteil von Windows ist (Home Edition wird ebenfalls unterstützt, das Tool wird jedoch nicht standardmäßig installiert). Das Skript implementiert auch eine Problemumgehung für das fehlende WMIC-Tool, indem es ein WSH-vbscript erstellt und aufruft, um auf eine WMI-Schnittstelle zuzugreifen und die Zeit mit demselben Format wie das WMIC-Tool in die Konsolenausgabe zu schreiben.
quelle
Ein guter einzeiliger Trick, um eine frühe variable Erweiterung zu vermeiden, ist die Verwendung
cmd /c echo ^%time^%
quelle
quelle
Verwenden Sie für eine sehr einfache Lösung für das numerische Datum zur Verwendung in Dateinamen den folgenden Code:
quelle
Teilen Sie die Ergebnisse des Datumsbefehls durch einen Schrägstrich auf, und verschieben Sie dann alle Token in die entsprechenden Variablen.
quelle