Update: Jetzt, da es 2016 ist, würde ich PowerShell dafür verwenden, es sei denn, es gibt einen wirklich überzeugenden abwärtskompatiblen Grund dafür, insbesondere aufgrund des Problems der regionalen Einstellungen bei der Verwendung date
. Siehe @ npocmakas https://stackoverflow.com/a/19799236/8479
Mit welchen Windows-Befehlszeilenanweisungen kann ich die aktuelle Datums- und Uhrzeitangabe in einem Format abrufen, das ich in einen Dateinamen einfügen kann?
Ich möchte eine .bat-Datei haben, die beispielsweise ein Verzeichnis in ein Archiv mit dem aktuellen Datum und der aktuellen Uhrzeit als Teil des Namens komprimiert Code_2008-10-14_2257.zip
. Gibt es eine einfache Möglichkeit, dies unabhängig von den regionalen Einstellungen der Maschine zu tun?
Das Datumsformat macht mir nichts aus, im Idealfall wäre es JJJJ-MM-TT, aber alles Einfache ist in Ordnung.
Bisher habe ich das, was mir auf meiner Maschine gibt Tue_10_14_2008_230050_91
:
rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
rem Now use the timestamp by in a new ZIP file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.zip Code
Ich kann damit leben, aber es scheint ein bisschen klobig. Im Idealfall wäre es kürzer und hätte das zuvor erwähnte Format.
Ich verwende Windows Server 2003 und Windows XP Professional. Ich möchte keine zusätzlichen Dienstprogramme installieren, um dies zu erreichen (obwohl mir klar ist, dass es einige gibt, die eine gute Datumsformatierung ermöglichen).
[datetime]::now.tostring("yyyy-MM-dd")
Antworten:
Informationen zum aktuellen Datum im Format MMTTJJJJ finden Sie unter Windows-Batchdatei (.bat) :
Wenn Sie die Zeit im 24-Stunden- / Militärformat bevorzugen, können Sie die zweite FOR-Zeile durch folgende ersetzen:
Wenn Sie das Datum unabhängig von der Reihenfolge Tag / Monat der Region wünschen, können Sie "WMIC os GET LocalDateTime" als Quelle verwenden, da es in ISO-Reihenfolge vorliegt:
quelle
For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)
die zweite Zeile.For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))
Das gibt Werte wie "0001" und "0315" zurück, die ich in meinen Dateinamen bevorzuge.wmic
Befehls! Bisher habe ich nur gesehenWMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table
. Ebenso, um20120623-1619
in meiner lokalen Amsterdamer Zeitzone in einer Zeile zu gelangen:for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a) & set datetime=%ts:~0,8%-%ts:~8,4%
%%a was unexpected at this time.
Regional unabhängige Analyse von Datum und Uhrzeit
Das Ausgabeformat von
%DATE%
und desdir
Befehls ist regional abhängig und daher weder robust noch intelligent. date.exe (Teil von UnxUtils ) liefert alle Datums- und Zeitinformationen in jedem denkbaren Format. Sie können die Datums- / Uhrzeitinformationen auch aus jeder Datei mit extrahierendate.exe
.Beispiele: (Verwenden Sie in einem Cmd-Skript %% anstelle von%)
date.exe +"%Y-%m-%d"
2009-12-22
date.exe +"%T"
18:55:03
date.exe +"%Y%m%d %H%M%S: Any text"
20091222 185503: Beliebiger Text
date.exe +"Text: %y/%m/%d-any text-%H.%M"
Text: 09/12 / 22-beliebiger Text-18.55
Command: date.exe +"%m-%d """%H %M %S """"
07-22 "18:55:03" `
Die Datums- / Uhrzeitinformationen aus einer Referenzdatei:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"
Verwenden Sie es in einem CMD-Skript, um Informationen zu Jahr, Monat, Tag und Uhrzeit abzurufen:
Verwenden Sie es in einem CMD-Skript, um einen Zeitstempel in einem beliebigen Format abzurufen:
Extrahieren der Datums- / Uhrzeitinformationen aus einer Referenzdatei.
Hinzufügen von Datums- / Uhrzeitinformationen zu einer Datei:
date.exe ist Teil der kostenlosen GNU-Tools, für die keine Installation erforderlich ist .
ANMERKUNG: Das Kopieren
date.exe
in ein Verzeichnis im Suchpfad kann dazu führen, dass andere Skripts fehlschlagen, die den integrierten Windows-date
Befehl verwenden.quelle
date.exe
scheint vom Gebietsschema abhängig zu sein. Es gibt das Datum in TT / MM / JJJJ auf meinem System zurück. Wenn es vom Gebietsschema unabhängig wäre, würde ich entweder MM / TT / JJJJ oder JJJJ-MM-TT erwarten. Ich glaube nicht, dass diese Antwort über die eingebaute date.exe spricht, sondern über eine Version von Drittanbietern.Zwei weitere Möglichkeiten, die nicht von den Zeiteinstellungen abhängen (beide stammen aus : So erhalten Sie Daten / Zeit unabhängig von der Lokalisierung :) . 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):
Weitere Informationen zur Get-Date-Funktion .
ROBOCOPY - Es ist kein nativer Befehl für Windows XP und Windows Server 2003, kann jedoch von der Microsoft-Website heruntergeladen werden . Ist aber 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 Woche des Jahres, Zeit in Millisekunden und so weiter erhalten.
JScript / Batch- Hybrid (muss gespeichert werden als
.bat
). JScript ist auf jedem System von NT und höher als Teil von Windows Script Host verfügbar ( obwohl es über die Registrierung deaktiviert werden kann, ist dies ein seltener Fall ):VSCRIPT / 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 , v3 (nur für Windows 7 und höher)). Es wird standardmäßig unter Windows 7 / Windows Server 2008 und höher installiert:
So verwenden Sie es aus einer Batchdatei:
Selbst kompiliertes jscript.net/batch (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 Wochentag abrufen . Es ist vergleichsweise langsam und erstellt auch eine temporäre Datei. Es basiert auf den Zeitstempeln, die logman in seine Protokolldateien einfügt. Es 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 ...
Ein weiterer Weg mit WMIC, der auch die Woche des Jahres und den Wochentag angibt, jedoch nicht die Millisekunden (für Millisekunden überprüfen Sie die Antwort von foxidrive):
Verwenden von TYPEPERF mit einigen Anstrengungen, um schnell und kompatibel mit verschiedenen Spracheinstellungen und so schnell wie möglich zu sein:
Mit MSHTA können JavaScript-Methoden aufgerufen werden, die der in # 3 oben beschriebenen JScript-Methode ähneln. Beachten Sie, dass die Eigenschaften des JavaScript-Datumsobjekts mit Monatswerten von 0 bis 11 und nicht von 1 bis 12 nummeriert sind. Ein Wert von 9 bedeutet also Oktober.
quelle
makecab
: Dies funktioniert, indem eine Datei mit dem Namen erstellt~.rpt
und einestring
darin gesuchte Datei durchsucht wird, beginnend mitmakecab
einer Zeile wieMakeCAB Report: Tue Sep 02 22:15:57 2014
. Für mich ist dieser Befehl nicht lokalisiert, sondern unabhängig vom Gebietsschema. Dieser Trick beruht darauf. Hoffen wir, dass es niemals so wird, oder hüten Sie sich!mshta
Hybrid? :) Stört es dich, wenn ich deine Antwort bearbeite und eine hinzufüge? Dies scheint die beste Sammlung esoterischer Lösungen zu sein, und es scheint, als ob siemshta
hierher gehört.Hier ist eine Variante von alt.msdos.batch.nt, die lokal unabhängig arbeitet.
Fügen Sie dies in eine Textdatei ein, z. B. getDate.cmd
Damit der Code ohne Fehlermeldungen an stderr funktioniert, musste ich die einfachen Anführungszeichen um die Variablenzuweisungen für %% a, %% b und %% c hinzufügen. Mein Gebietsschema (PT) verursachte zu einem Zeitpunkt in der Schleife / Analyse Fehler, in denen Dinge wie "set = 20" ausgeführt wurden. Die Anführungszeichen ergeben ein Token (wenn auch leer) für die linke Seite der Zuweisungsanweisung.
Der Nachteil sind die unordentlichen Namen der Gebietsschemavariablen: 'yy', 'mm' und 'dd'. Aber hey, wen interessiert das?
quelle
dd
,mm
undyy
in der Ausgabe vonecho:^|date
.date
gibtGeben Sie das neue Datum ein: (TT-MM-JJ)
, wo dasJJ
dein Drehbuch bricht (erwartetYY
))Ich benutze dies (wieder nicht regional unabhängig (UK))
quelle
Die ersten vier Zeilen dieses Codes geben Ihnen zuverlässige YY TT MM YYYY HH Min Sec-Variablen in Windows XP Professional und höher.
quelle
Leider ist dies nicht immun gegen regionale Einstellungen, aber es macht, was Sie wollen.
Erstaunlich, was Sie auf Wikipedia finden können .
quelle
Verwenden Sie das folgende Skript, um den aktuellen Tag in der Befehlszeile abzurufen:
quelle
Ein anderer Weg ( Kredit ):
Beachten Sie, dass meine beiden Antworten hier immer noch von der Reihenfolge des Tages und des Monats abhängen, die durch die regionalen Einstellungen bestimmt wird - ich bin mir nicht sicher, wie ich das umgehen soll.
quelle
quelle
http://www.dotnetperls.com/7-zip-examples
hat einige gute Punkte kann für jemanden in Zukunft nützlich sein.Dies ist nicht wirklich kürzer, könnte aber flexibler sein ( Kredit ):
quelle
Hier ist eine Möglichkeit, die Datums- und Uhrzeitangabe in einer einzigen Zeile abzurufen:
In den USA wird "JJJJ-MM-TT Hhmm" ausgegeben. Unterschiedliche regionale Einstellungen führen zu unterschiedlichen% date% -Ausgaben. Sie können jedoch die Token-Reihenfolge ändern.
Wenn Sie ein anderes Format wünschen, ändern Sie die Echoanweisung, indem Sie die Token neu anordnen oder andere (oder keine) Trennzeichen verwenden.
quelle
Verwenden Sie einfach diese Zeile:
quelle
Kurze Antwort :
Lange Antwort
quelle
Matthew Johnsons Einzeiler-Lösung , um Datum und Uhrzeit des Einzeilers zu ermitteln, ist beredt und nützlich.
Es ist jedoch eine einfache Änderung erforderlich, um innerhalb einer Batchdatei zu arbeiten:
quelle
echo %date:/=-%%time::=-%
Und hier ist eine ähnliche Batch-Datei für den Zeitabschnitt.
- Jeroen
quelle
z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path”
laden , aber ich möchte wissen, wie Dateien nach dem Erstellungsdatum geladen werden. Jede Hilfe wäre sehr dankbar. Beim Stackoverflow wurde eine Frage gestellt, aber noch keine Antwort. Bitte werfen Sie einen Blick auf den Link für die Details stackoverflow.com/q/32293517/3327081forfiles
.Ich habe die Antwort mit der Batch-Datei von vMax geändert, damit sie auch mit der niederländischen Sprache funktioniert.
Die Holländer - persistent , wie wir sind - haben ein paar Änderungen in der
%date%
,date/t
unddate
dass Bruch der ursprünglichen Batch-Datei.Es wäre schön, wenn einige Leute dies auch mit anderen Windows-Gebietsschemas vergleichen und die Ergebnisse zurückmelden könnten.
Wenn die Batch-Datei an Ihrem Standort fehlschlägt, fügen Sie die Ausgabe dieser beiden Anweisungen in die Eingabeaufforderung ein:
echo:^|date
date/t
Dies ist ein Beispiel für die Ausgabe, die Sie aus der Batch-Datei erhalten sollten:
Hier ist der überarbeitete Code mit Kommentaren zum Warum:
- Jeroen
quelle
jj-mm-aaaa
für jour, mois, annee? Italiener vielleichtgg/mm/aaaa
für Giorno, Mese, Anno? Deutschett.mm.jjjj
für Tag, Monat, Jahr? Aber dann: Ich denke, in den meisten Ländern werden nur wenige Sprachen verwendet. Wie in den Niederlanden wird Windows oft Englisch oder Niederländisch sein, sonst nicht viel. Gut genug für mich.jj
und erzwingt kein 4-stelliges Jahr), wird jedoch verwendetshift
, um den Tag wieMon
oder zu verwerfenma
. Einfach anders.(TT-MM-JJ)
, diedate/t
Ausgabe lautet23.06.2012
. / cc @Arjanreg query "HKCU\Control Panel\International" /vShortDate
. Beachten Sie beim Testen Folgendes: Wenn Sie bei einer geöffneten Eingabeaufforderung diese Einstellung in der Systemsteuerung ändern, ändert sich auch das Format, in dem das Datum angezeigt wird (fürdate
unddate /t
undecho %date%
). Unter Windows 7 wird jedoch das Format für das neue Datum NICHT geändert! Als würde ich mein kurzes Datumsformat ändernYY/MM/dd
, bekomme ich :The current date is: 12/06/23 Enter the new date: (mm-dd-yy)
. Das Öffnen einer neuen Eingabeaufforderung behebt das.reg query "HKCU\Control Panel\International" /v sShortDate
.Folgendes habe ich verwendet:
Wenn Sie weitere Ideen zur Automatisierung von Backups in 7-Zip-Archiven wünschen, habe ich ein kostenloses / offenes Projekt, das Sie verwenden oder auf Ideen überprüfen können: http://wittman.org/ziparcy/
quelle
Ich hatte ein ähnliches Problem. Ich habe einen automatischen täglichen Download einer verschlüsselten Datei von einem FTP-Server. Ich wollte die Datei mit gpg entschlüsseln, die Datei auf das aktuelle Datum umbenennen (JJJJMMTT-Format) und die entschlüsselte Datei in einem Ordner für die richtige Abteilung ablegen.
Ich ging mehrere Vorschläge zum Umbenennen der Datei nach Datum durch und hatte kein Glück, bis ich auf diese einfache Lösung stieß.
Es hat perfekt funktioniert (dh der Dateiname lautet "2011-06-14.txt").
(Quelle)
quelle
Eine Funktion, die basiert auf
wmic
:Oberseite: Region unabhängig. Nachteil: Nur Systemadministratoren können wmic.exe ausführen.
Verwendungszweck:
Dies spiegelt eine Zeichenfolge wie diese wider:
Beachten Sie, dass Funktionsparameter out-Parameter sind - das heißt, Sie müssen Variablennamen anstelle von Werten angeben.
Alle Parameter sind optional. Dies
call:Now Y M
gilt auch für einen gültigen Aufruf, wenn Sie nur Jahr und Monat abrufen möchten.quelle
http://sourceforge.net/projects/unxutils/files/
Suchen Sie in der ZIP-Datei nach "Date.exe" und benennen Sie sie in "DateFormat.exe" um (um Konflikte zu vermeiden).
Legen Sie es in Ihrem Windows-System32-Ordner ab.
Es gibt viele Optionen für die "Datumsausgabe".
Verwenden Sie für Hilfe
DateFormat.exe --h
Ich bin nicht sicher, wie Sie die Ausgabe in eine Umgebungsvariable einfügen würden ... mit SET.
quelle
Regionale unabhängige Lösung zur Erstellung des ISO-Datumsformats:
Was noch optimiert werden könnte: Andere Prozesse können verwirrt werden, wenn das Datumsformat in der kurzen Zeit verwendet wird, während es geändert wird. Das Parsen der Ausgabe gemäß der vorhandenen Formatzeichenfolge könnte also "sicherer" sein - ist jedoch komplizierter
quelle
quelle
Bei gegebener bekannter Lokalität als Referenz in funktionaler Form. Der
ECHOTIMESTAMP
Aufruf zeigt, wie der Zeitstempel in eine Variable übernommen wird (DTS
in diesem Beispiel).Und in der Datei timestamp.bat gespeichert, hier ist die Ausgabe:
quelle
(yy)yy年m月d日 hh:mm
- keine führenden Nullen. (yy) könnte ignoriert werden, da wir ein zweistelliges Jahr oder ein vierstelliges Jahr haben. Beachten Sie jedoch eines: Das Datums- und Uhrzeitformat kann pro Maschine geändert werden.systeminfo
die CLI aus und lassen Sie mich wissen, wofür Sie sehenSystem Locale
. Die Ausführung des Programms dauert einige Zeit, aber möglicherweise wird das Ergebnis des Gebietsschemas zwischengespeichert und anschließend zum Indizieren eines Zeitstempelformats verwendet.Unter Windows 7 funktioniert dieser Code für mich:
quelle
independent of the regional settings of the machine
Ich stelle fest, dass das O / P nicht nach einer regionunabhängigen Lösung gefragt hat. Meine Lösung ist jedoch für Großbritannien.
Dies ist die einfachste mögliche Lösung, eine 1-zeilige Lösung zur Verwendung in einer Batch-Datei:
quelle
...particularly because of the regional settings issue with using date
. Übrigens. Ihre Lösung entspricht den zwanzig anderen Antworten.echo %date:/=-%
Ich weiß, dass es bereits zahlreiche Möglichkeiten gibt. Aber hier ist mein Weg, es aufzuschlüsseln, um zu verstehen, wie es gemacht wird. Hoffentlich ist es hilfreich für jemanden, der Schritt für Schritt Methode mag.
quelle
independent of the regional settings of the machine