Ich versuche, eine Zip-Datei aus einem Batch-Skript zu erstellen. Ich muss den Namen archive_.zip haben
Leider funktioniert dies aufgrund der Schrägstriche nicht auf Systemen, deren Datum wie y / m / d formatiert ist:
zip some_options "archive_%DATE%.zip"
Die %DATE%
Variable erweitert sich zu so etwas wie
Mon 09/28/2009
Ich habe Zugriff auf das Paket gnuwin32, sodass ich beispielsweise sed
Leerzeichen und Schrägstriche durch Bindestriche ersetzen kann. Das Problem ist, wie würde ich die Ausgabe von verwenden sed
, um den Dateinamen des Zip-Archivs zu erstellen?
In Unix (bash) kann man einen Befehl in Anführungszeichen setzen, um ihn vor Ort auszuwerten und seine Ausgabe in einem anderen Befehl zu verwenden.
zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip
Gibt es etwas Ähnliches in Windows?
Oder gibt es eine Möglichkeit, eine Variable auf den zurückgegebenen Wert von zu setzen sed
und diesen zum Erstellen des Dateinamens zu verwenden?
quelle
%date:~-10,2%-%date:~-7,2%-%date:~-4,4%
:!Ich benutze immer:
Dann wird CDate Sat02182012 sein. Wenn Sie es sortierbarer machen möchten, setzen Sie CDate auf %% d - %% b - %% c, damit es 2012-02-18 sein wird
So machen Sie Datum und Uhrzeit für Ordner / Dateien benutzerfreundlich.
quelle
Ich habe eine Antwort auf eine sehr ähnliche Frage gestellt hier . Das Aufteilen des Datums in Felder erfolgt in einer Zeile anstelle mehrerer Zeilen in Harrymcs Antwort.
Der interessante Teil ist:
Und die Warnung ist immer noch relevant:
quelle
das
/=-
ersetzt das/
mit einem Minuszeichen.quelle
Dieser ziemlich schreckliche Code sollte so etwas wie das tun, was Sie wollen
Wenn Sie den Dateinamen entsprechend ändern.
quelle
echo %date:~6,4%%date:~3,2%%date:~0,2%
kehrt9-289-20
auf meinem Computer zurück, da ich das Datum für die Verwendung von JJJJ-MM-TT festgelegt habe (heute ist also der 28.09.2009).Da Ihre Frage als Windows - markiert ist, fand ich diese Lösung , dass die Arbeiten in den guten alten .bat - Dateien:
„Windows Batch - Datei (.bat) aktuelles Datum in MMTTJJJJ Format zu bekommen“ ,
und können wahrscheinlich auf Ihren Fall angepasst werden:
Dies ist nichts anderes, als die Variable% date so einzurichten, dass sie das heutige Datum im Format MMDDYYYY enthält, damit sie später im Skript aufgerufen werden kann.
Bearbeiten
Eine bessere Syntax gefunden. Da mein Datum heute "Mo 28/09/2009" ist:
festgelegter Tag =% Datum: ~ 0,2%
festgelegter Monat =% Datum: ~ 7,2%
festgelegter Jahr =% Datum: ~ 10,4%
quelle
reine cmd.exe Version in Kombination mit dem gnuwin32-'date ':
quelle
was ist mit cscript + vbasic:
Ruf es an über
quelle
Für / f "tokens = 1,2,3,4,5 delims = /." %% a in ('date / T') setze CDate = %% d - %% b - %% c
@echo data =% CDate%
Dies ist der Jahr-Monat-Tag, der heutzutage am häufigsten vorkommt
quelle
Jede Lösung, die eine der beiden
%DATE%
oder die Ausgabe von verwendetdate /t
, kann zum Absturz führen, wenn der Benutzer seine regionalen Einstellungen geändert hat. Zum Beispiel habe ich mein "kurzes Datum" -Format auf eingestellt"yyyy-MM-dd"
, damit ich%DATE%
gleich habe"2012-02-18"
unddate /t
die gleiche Ausgabe erzeuge. (Dies gilt für Windows 7; ich gehe davon aus, dass dies auch für frühere Versionen von Windows gilt.)Erstellen Sie eine Batchdatei und führen Sie sie aus.
Da Sie den GNU-
date
Befehl zur Verfügung haben, können Sie so etwas tun:tmp.bat
wird etwas enthalten wie:Beachten Sie, dass dies
tmp.bat
im aktuellen Verzeichnis zu Problemen führt. es könnte besser sein zu schaffen%TEMP%\tmp.bat
. Ich habe die Datei danach auch nicht entfernt; das ist einfach genug.date +FORMAT
Mit dieser Option können Sie das Ausgabeformat desdate
Befehls angeben , ähnlich einerprintf
Formatzeichenfolge. Einzelheiten finden Sie in der Dokumentation zu coreutils date . Das Format kann beliebigen Text enthalten, sodass Sie in diesem Fall nicht einmal verwenden müssensed
.quelle
Ich denke, wenn Sie alle Teile zusammenfügen, erhalten Sie etwas, das für Sie funktioniert. Dies ist auf einem Windows 2003-System, um mir einen Schnappschuss der ausgeführten Prozesse als Reaktion auf einen Auslöser des Systemmonitors zu geben:
Die Ausgabedatei wird in einer Zeichenfolge ohne Begrenzer benannt.
quelle
Sollte arbeiten.
Andererseits - vielleicht haben Sie einen
date
Befehl zur Verfügung (ich kenne Windows nicht). Wenn ja, dann machen Sie einfach:quelle
Ich bin mir nicht sicher, ob es zu dir passt, aber mein Code ist
quelle