Wir haben einen Stapeljob, der jeden Tag ausgeführt wird und eine Datei in einen Abholordner kopiert. Ich möchte auch eine Kopie dieser Datei nehmen und sie in einem Archivordner mit dem Dateinamen ablegen
yyyy-MM-dd.log
Was ist der einfachste Weg, dies in einem Windows-Stapeljob zu tun?
Ich suche im Grunde nach einem Äquivalent zu diesem Unix-Befehl:
cp source.log `date +%F`.log
windows
batch-file
cmd
timestamp
Eoin Campbell
quelle
quelle
Antworten:
Aber es ist vom Gebietsschema abhängig. Ich bin nicht sicher, ob
%DATE%
es lokalisiert ist oder von dem Format abhängt, das für das kurze Datum in Windows angegeben wurde.Hier ist eine vom Gebietsschema unabhängige Methode, um das aktuelle Datum aus dieser Antwort zu extrahieren. Dies hängt jedoch von
WMIC
und abFOR /F
:quelle
2014-5.-01
(wenn es sein würde2014-05-26
). Seien Sie also sehr vorsichtig, wenn Sie Skripte veröffentlichen, die dies enthalten!%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
Dies funktionierte für mich und war eine dateinamensichere Lösung (obwohl sie ein MM-TT-JJJJ-Format generiert):
Der erste Befehl nimmt ein DATE und ersetzt
/
durch-
, nimmt die TIME und ersetzt:
durch-
und kombiniert sie im DATE @ TIME-Format. Die zweiteset
Anweisung entfernt Leerzeichen und die dritteset
ersetzt die Erweiterung,
durch.
und hängt sie an.jpg
.Der obige Code wird in einem kleinen Skript verwendet, das Bilder von einer IP-Sicherheitskamera zur weiteren Verarbeitung abruft:
quelle
10-12-2014@14-22-59,44.jpg
mit einem Komma vor den Millisekundenset SAVESTAMP=%SAVESTAMP:,=.%.jpg
vor derecho
Anweisung hinzuzufügen . Wenn das funktioniert, werde ich die Antwort aktualisieren.08.06.2016@15-42-20,33.jpg
auf meinem deutschen und[email protected]
meinem englischen Laptop .yyyy-MM-dd
Seien Sie NUR für das französische Gebietsschema (Frankreich) vorsichtig, da es
/
im Datum angegeben ist:Für unser Problem mit der Protokolldatei ist hier NUR mein Vorschlag für das französische Gebietsschema :
quelle
"_0:00"
(das unterstrichene Zeichen ist ein Leerzeichen)Hier ist eine vom Gebietsschema unabhängige Lösung (Kopie in eine Datei mit dem Namen SetDateTimeComponents.cmd):
Ich habe alle meine .cmd-Skripte in demselben Ordner abgelegt (% SCRIPTROOT%). Jedes Skript, das Datums- / Zeitwerte benötigt, ruft SetDateTimeComponents.cmd wie im folgenden Beispiel auf:
Wie das Beispiel zeigt, können Sie SetDateTimeComponents.cmd jederzeit aufrufen, wenn Sie die Datums- / Zeitwerte aktualisieren müssen. Das Ausblenden des Zeitanalyse-Skripts in seiner eigenen SetDateTimeComponents.cmd-Datei ist eine gute Möglichkeit, die hässlichen Details auszublenden und vor allem Tippfehler zu vermeiden.
quelle
prompt $d $t
gibt 30.05.2016 15: 35: 56,93 auf meinem System zurück.Da die Idee, sie auseinander zu reißen
%DATE%
und%TIME%
auseinander zu zerdrücken, bestenfalls fragil erscheint, ist hier eine Alternative, die einen Powershell-Oneliner verwendet:Referenz für
get-date
ist hier , mit Formatoptionen sowohl für .NET-Stil und UNIX-Stil.quelle
Ich benutze dies häufig und füge alles in einen einzigen Kopierbefehl ein. Im Folgenden wird example.txt als example_YYYYMMDD_HHMMSS.txt kopiert, und Sie können es natürlich an Ihr bevorzugtes Format anpassen. Die Anführungszeichen sind nur erforderlich, wenn in der Dateispezifikation Leerzeichen vorhanden sind. Wenn Sie genau das gleiche Datum / den gleichen Zeitstempel wiederverwenden möchten, müssen Sie ihn in einer Variablen speichern.
quelle
Dadurch wird sichergestellt, dass die Ausgabe zweistellig ist. Sie können die Ausgabe nach Ihren Wünschen anordnen und testen, indem Sie den Kommentarbereich deaktivieren. Genießen!
(Ich habe viel davon aus anderen Foren ausgeliehen ...)
quelle
Erstellen Sie eine Datei mit dem aktuellen Datum als Dateiname (z. B. 2008-11-08.dat).
Mit dem aktuellen Datum aber ohne das "-" (ex. 20081108.dat)
quelle
Vielleicht kann das helfen:
oder
quelle
Ich habe ein kleines C-Programm zusammengestellt, um den aktuellen Zeitstempel auszudrucken (länderspezifisch, keine schlechten Zeichen ...). Dann benutze ich den Befehl FOR, um das Ergebnis in einer Umgebungsvariablen zu speichern:
Hier ist ein Link:
https://github.com/HarryPehkonen/dos-timestamp
quelle
Ich weiß, dass dieser Thread alt ist, aber ich möchte ihn hier nur hinzufügen, weil er mir sehr geholfen hat, dies alles herauszufinden und es ist sauber. Das Schöne daran ist, dass Sie es in eine Schleife für eine Batch-Datei setzen können, die immer ausgeführt wird. Server-Betriebszeitprotokoll oder so. Dafür benutze ich es sowieso. Ich hoffe das hilft irgendwann jemandem.
quelle
ERROR : Invalid Parameter #12 : "/LOG:C:\opt\Sync_08.10.2020_16:27:39.log"
Als Fix habe ich stattdessen Bindestriche verwendet:set FreshTime=%hour%-%min%-%secs%
Sie können einfach das aktuelle lokale Format erkennen und das Datum in Ihrem Format abrufen, zum Beispiel:
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber es gibt eine weitaus einfachere Antwort (obwohl dies möglicherweise nur in neueren Windows-Versionen funktioniert). Verwenden Sie einfach den Parameter / t für die Dos-Befehle DATE und TIME, um nur das Datum oder die Uhrzeit anzuzeigen und Sie nicht dazu aufzufordern, es wie folgt einzustellen:
quelle
1) Sie können GNU- Coreutils herunterladen, die mit dem GNU-Datum geliefert werden
2) Sie können VBScript verwenden , was die Datumsmanipulation in Windows erleichtert:
Führen Sie das Skript wie folgt aus:
quelle
Dies funktioniert gut mit (meinem) deutschen Gebietsschema, sollte es möglich sein, es an Ihre Bedürfnisse anzupassen ...
quelle
%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
funktioniert auch für portugiesische Location! Ich meine JJJJMMTTFür große Zip-Dateien für die Bereitstellung verwende ich Viertelstunden. Niemand sonst auf dieser Seite hatte es zuvor erwähnt, daher werde ich mein kleines Skript hier einfügen:
Es ist noch keine Viertelstunde von Mitternacht bis 5 Uhr morgens, aber es macht es trotzdem so, dass Sie mehrmals am Tag eine gestempelte Veröffentlichung mit wenigen Kollisionen haben können.
Hoffentlich hilft das.
quelle
benutzte Martins Vorschlag mit einer kleinen Änderung, um dem Dateinamen einen Zeitstempel hinzuzufügen:
Für den 10:17:21 23/10/2019 Das Ergebnis ist:
quelle