Wie speichere ich das aktuelle Datum im Format JJJJ-MM-TT in einer Variablen in einer Windows-BAT-Datei?
Unix-Shell-Analogon:
today=`date +%F`
echo $today
windows
batch-file
Maksym Polshcha
quelle
quelle
Antworten:
Sie können das aktuelle Datum auf eine länderunabhängige Weise mit abrufen
Anschließend können Sie die einzelnen Teile mit Teilzeichenfolgen extrahieren:
Eine andere Möglichkeit, Variablen zu erhalten, die die einzelnen Teile enthalten, wäre:
Viel schöner als mit Teilzeichenfolgen herumzuspielen, auf Kosten der Verschmutzung Ihres variablen Namespace.
Wenn Sie UTC anstelle der Ortszeit benötigen, ist der Befehl mehr oder weniger derselbe:
quelle
for /f
zwei Zeilen zurückgegeben werden, von denen die letztere leer ist. Sie können das lösen, indem Sieset MyDate=
dazwischen verwenden. Ich denke, darüber ist user2023861 gestolpert.Year
,Month
,Day
,Hour
,Minute
,Second
,Quarter
,WeekInMonth
,DayOfWeek
for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x set today=%Year%-%Month%-%Day%
ist eine ungültige Antwort: Es wird ein einstelliger Monat und Tag zurückgegeben. Wie wird eine zweistellige Linke mit einer Zeichenfolge von null Monat und Tag bis Datum aufgefüllt?Wenn Sie dies mit Standard-MS-DOS-Befehlen in einer Batch-Datei erreichen möchten, können Sie Folgendes verwenden:
Ich bin sicher, dass dies weiter verbessert werden kann, aber dies gibt das Datum in 3 Variablen für Tag (TT), Monat (MM) und Jahr (JJJJ). Sie können diese später nach Bedarf in Ihrem Batch-Skript verwenden.
Obwohl ich verstehe, dass eine Antwort auf diese Frage akzeptiert wurde, wird diese alternative Methode von vielen geschätzt, die dies ohne Verwendung der WMI-Konsole erreichen möchten. Ich hoffe, dass sie dieser Frage einen Mehrwert verleiht.
quelle
Verwenden Sie
date /T
diese Option , um das Format an der Eingabeaufforderung zu ermitteln.Wenn das Datumsformat
Thu 17/03/2016
wie folgt verwendet wird:quelle
SELECT CONVERT(VARCHAR(16), GETDATE(), 112)
".%date:~10,4%%date:~7,2%%date:~4,2%T%time:~0,2%%time:~3,2%%time:~6,2%
Zwei weitere Möglichkeiten, die nicht von den Zeiteinstellungen abhängen (beide stammen aus Wie Daten / Zeit unabhängig von der Lokalisierung erhalten werden ). Und beide erhalten auch den Wochentag und keiner von ihnen benötigt Administratorrechte!:
MAKECAB - funktioniert auf JEDEM Windows-System (schnell, erstellt jedoch eine kleine temporäre Datei) (das foxidrive-Skript):
ROBOCOPY - Es ist kein nativer Befehl für Windows XP und Windows Server 2003 , kann jedoch von der Microsoft-Website heruntergeladen werden . Aber es ist in alles von Windows Vista und höher integriert:
Und drei weitere Möglichkeiten, die andere Windows-Skriptsprachen verwenden. Sie geben Ihnen mehr Flexibilität, z. B. können Sie die Woche des Jahres, die Zeit in Millisekunden usw. abrufen.
JScript / BATCH- Hybrid (muss gespeichert werden als
.bat
). JScript ist auf jedem System ab Windows NT und höher als Teil von Windows Script Host verfügbar ( kann jedoch in seltenen Fällen über die Registrierung deaktiviert werden ):VBScript / BATCH- Hybrid ( Ist es möglich, VBScript in eine Batch-Datei einzubetten und auszuführen, ohne eine temporäre Datei zu verwenden? ) Der gleiche Fall wie bei jscript, aber die Hybridisierung ist nicht so perfekt:
PowerShell - kann auf jedem Computer mit .NET installiert werden - Download von Microsoft ( v1 , v2 und v3 (nur für Windows 7 und höher)). Standardmäßig unter Windows 7 / Win2008 und höher installiert:
Selbst kompiliertes jscript.net/batch (Ich habe noch nie einen Windows-Computer ohne .NET gesehen, daher denke ich, dass dies ein ziemlich portables Gerät ist):
Logman Dies kann nicht das Jahr und den Tag der Woche abrufen . Es ist vergleichsweise langsam, erstellt auch eine temporäre Datei und basiert auf den Zeitstempeln, die logman auf seine Protokolldateien legt. Funktioniert unter Windows XP und höher. Es wird wahrscheinlich nie von irgendjemandem benutzt werden - auch nicht von mir - aber es ist eine weitere Möglichkeit ...
Weitere Informationen zur Get-Date-Funktion .
quelle
Ich mochte Joeys Methode wirklich, aber ich dachte, ich würde sie ein bisschen erweitern.
Bei diesem Ansatz können Sie den Code mehrmals ausführen, ohne sich Gedanken über den alten Datumswert machen zu müssen, da dieser bereits definiert ist.
Jedes Mal, wenn Sie diese Batchdatei ausführen, wird eine ISO 8601-kompatible kombinierte Datums- und Zeitdarstellung ausgegeben.
In dieser Version müssen Sie darauf achten, dass Sie denselben Code nicht an mehreren Stellen in der Datei kopieren / einfügen, da dies zu doppelten Beschriftungen führen würde. Sie können entweder für jede Kopie ein separates Etikett haben oder diesen Code einfach in eine eigene Batchdatei einfügen und ihn bei Bedarf aus Ihrer Quelldatei aufrufen.
quelle
Verwenden Sie einfach die
%date%
Variable:quelle
Laut Antwort von @ProVi ändern Sie einfach die gewünschte Formatierung
wird zurückkehren
EDIT Wie pro @Jeb Kommentar, der korrekt ist das obige Zeitformat funktioniert nur, wenn Ihr DATE / T Befehl gibt
Es ist jedoch einfach zu bearbeiten, um es an Ihr Gebietsschema anzupassen. Mithilfe der Indizierung jedes Zeichens in der Zeichenfolge, die von der entsprechenden Umgebungsvariablen% DATE% zurückgegeben wird, können Sie die Teile der Zeichenfolge extrahieren, die Sie benötigen.
z.B. Die Verwendung von% DATE ~ 10,4% würde die Umgebungsvariable DATE erweitern und dann nur die 4 Zeichen verwenden, die am 11. Zeichen (Versatz 10) des erweiterten Ergebnisses beginnen
Wenn Sie beispielsweise Daten im US-Stil verwenden, gilt Folgendes
quelle
Ich setze eine Umgebungsvariable auf den Wert im gewünschten numerischen Format, indem ich Folgendes tue:
quelle
Überprüfen Sie dieses ..
quelle
Wenn Sie Python installiert haben, können Sie dies tun
Sie können die Formatzeichenfolge einfach an Ihre Bedürfnisse anpassen.
quelle
python -c "import datetime;print(datetime.date.today())"
, da die__str__
Methode derdate
Klasse nur aufruftisoformat()
.Es ist möglich, PowerShell zu verwenden und seine Ausgabe mithilfe einer Schleife in eine Umgebungsvariable umzuleiten.
Über die Befehlszeile (
cmd
):In einer Batchdatei können Sie
%a
als%%a
:quelle
FOR /F "tokens=*" %%a IN ('powershell get-date -format "{yyyy\-MM\-dd\THH\:mm\:ss}"') DO SET date=%%a
so sein, verwenden Sie das obere MM für Monat und Backslash, um wörtliche Zeichen zu umgehen.Aufgrund des Datums- und Zeitformats handelt es sich um ortsspezifische Informationen. Das Abrufen aus den Variablen% date% und% time% erfordert zusätzlichen Aufwand, um die Zeichenfolge unter Berücksichtigung der Formattransformation zu analysieren. Eine gute Idee ist es, eine API zu verwenden, um die Datenstruktur abzurufen und nach Ihren Wünschen zu analysieren. WMIC ist eine gute Wahl. Im folgenden Beispiel verwenden Sie Win32_LocalTime . Sie können auch Win32_CurrentTime oder Win32_UTCTime verwenden .
Ergebnis:
2018-04-25_10: 03: 11
quelle
Dies ist eine Erweiterung von Joeys Antwort, um die Zeit einzuschließen und die Teile mit Nullen aufzufüllen.
Das Ergebnis ist beispielsweise 2019-06-01_17-25-36. Beachten Sie auch, dass dies die UTC-Zeit ist.
quelle
quelle
Ich benutze folgendes:
Oder in Kombination mit einem Protokolldateinamen 'MyLogFileName':
quelle
Wenn Powershell verfügbar ist, können Sie die folgenden Codes verwenden:
Hier ist das Ergebnis:
quelle
Wenn Ihnen eine einmalige Investition von 10 bis 30 Minuten nichts ausmacht, um eine zuverlässige Lösung zu erhalten (die nicht von den Regionseinstellungen von Windows abhängt), lesen Sie bitte weiter.
Befreien wir unseren Geist. Möchten Sie die Skripte so vereinfachen, dass sie einfach so aussehen? (Angenommen, Sie möchten die Variable LOG_DATETIME festlegen.)
Sie können. Erstellen Sie einfach eine FormatNow.exe mit C # .NET und fügen Sie sie Ihrem PATH hinzu.
Anmerkungen:
Leistungen:
Quellcode von FormatNow.exe, den ich mit Visual Studio 2010 erstellt habe (ich ziehe es vor, ihn selbst zu erstellen, um das Risiko des Herunterladens eines unbekannten, möglicherweise schädlichen Programms zu vermeiden). Kopieren Sie einfach die folgenden Codes und fügen Sie sie ein, erstellen Sie das Programm einmal und Sie haben einen zuverlässigen Datumsformatierer für alle zukünftigen Verwendungen.
Wenn es um komplizierte Logiken geht, können wir dies im Allgemeinen vereinfachen, indem wir ein sehr kleines Programm erstellen und das Programm aufrufen, um die Ausgabe stattdessen in einer Batch-Skriptvariablen zu erfassen. Wir sind keine Studenten und legen keine Prüfungen ab, bei denen wir die Batch-Script-Only-Regel befolgen müssen, um Probleme zu lösen. In einer realen Arbeitsumgebung ist jede (legale) Methode zulässig. Warum sollten wir uns immer noch an die schlechten Funktionen des Windows-Batch-Skripts halten, das Problemumgehungen für viele einfache Aufgaben erfordert? Warum sollten wir das falsche Werkzeug für den Job verwenden?
quelle