Ich versuche, die Sicherung eines Ordners auf einem Windows 2003 R2-Server zu automatisieren (derzeit ein manueller Vorgang).
Diese Aufgabe besteht aus drei Komponenten:
1) Erstellen Sie eine ZIP-Datei des folgenden Ordners im selben Verzeichnis, ohne Software von Drittanbietern zu verwenden:
d:\source\folder_to_back_up
Das gibt uns:
d:\source\folder_to_back_up.zip
2) Verschieben Sie die neu erstellte ZIP-Datei nach:
d:\destination
3) Benennen Sie die ZIP-Datei gemäß der folgenden Namenskonvention um:
Backup_YYYYMMDD.zip
Wenn Sie beispielsweise das heutige Datum verwenden, lautet der Name:
Backup_20150516.zip
Ich habe bisher herausgefunden, wie man Schritt 2 automatisiert:
robocopy /mov d:\source d:\destination folder_to_back_up.zip
... brauche aber etwas Hilfe bei der Automatisierung der Erstellung der ZIP-Datei und auch beim Umbenennungsschritt.
Ich bin für alle Ideen sehr dankbar!
Antwort1
Da Sie in den Kommentaren zur anderen Antwort angefangen haben, 7-Zip in Betracht zu ziehen, hier meine Vorgehensweise:
set SOURCE=d:\source\folder_to_back_up
set DEST=d:\destination
rem # a: Add, -mx: compression level 0-9, -tzip use ZIP format, -ssc: case sensitive, -ssw: add files opened for writing, -r: recursive
pushd "%SOURCE%" && 7za a -mx9 -tzip -ssc -ssw -r "%DEST%\Backup_%date%.zip" & popd
Beachten Sie, dass dies im Wesentlichen ein Einzeiler ist, wenn Sie die Quell- und Zielvariablen einbinden. Das pushd
/ popd
-Paar ist vorhanden, damit sich der Kontext nicht ändert, wenn Sie mehrere Sicherungen in einem Stapel durchführen. %date%
ist integriert.
Ich halte es nicht für sinnvoll, ein spezielles Dateiformat (ZIP) ohne die richtigen Tools erstellen zu wollen. Das ist, als ob man Java-Quellcode ohne JDK in JAR-Dateien kompilieren möchte.
Abhängigkeiten
Sie können das Problem des Löschens des Tools umgehen, indem Sie den obigen Code neben die Datei mit dem Namen backup_stuff.bat
kopieren und dann nur noch durch ersetzen, um genau auf diese Datei zu verweisen. Dies sollte die Meldung liefern, dass hier eine externe Abhängigkeit besteht ...7za.exe
backup_stuff.bat-7za.exe
7za
%~dp0\backup_stuff.bat-7za
Wenn Sie wirklich paranoid sein wollen, können Sie alternativ auch einfach 7zip in die Batchdatei einbetten :)
set SOURCE=d:\source\folder_to_back_up
set DEST=d:\destination
goto deps
:exec
pushd "%SOURCE%" && "%TEMP%\7za" a -mx9 -tzip -ssc -ssw -r "%DEST%\Backup_%date%.zip" & popd
goto end
:deps
@(
rem This is the Base64 enconded version of 7za.exe
rem To create this section execute the following commands:
rem certutil -encode 7za.exe 7za.exe.b64
rem echo @echo off>7za.exe.b64.bat && for /F "tokens=*" %L in (7za.exe.b64) do @echo echo %L>>7za.exe.b64.bat
echo -----BEGIN CERTIFICATE-----
echo TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
echo AAAAAAAAAAAAAAAA+AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
echo dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAB9EXJSOXAcATlwHAE5cBwB
echo QmwQATtwHAG6bBIBIHAcAQ9WFgFbcBwBt3hDAThwHAE5cB0BlnAcAbp4QQE+cBwB
rem ... lot of lines ommitted for sake of stackoverflow
echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
echo -----END CERTIFICATE-----
)>%TEMP%\7za.exe.b64
certutil -decode -f %TEMP%\7za.exe.b64 %TEMP%\7za.exe >NUL
goto exec
:end
Mein cmd stürzte ab, als ich versuchte, dies mit der ursprünglichen 7-zip v9.20-exe-Datei zu tun. Es sieht so aus, als ob es eine Beschränkung der Blocklänge gibt (...)
, ich fand heraus, dass sie bei etwa 370 kB liegt (ungefähr 5000 Zeilen b64). Das ursprüngliche base64 von 7-zip war 800 kB groß, aber das ist kein großes Problem, da es in mehrere Blöcke aufgeteilt werden kann @(...)>>target.file
, die unter der Beschränkung liegen. Aber ich schlage vor, es durchzulaufen, upx --brute 7za.exe
wodurch die exe-Datei kleiner als 300 kB wird.
Quellen
Antwort2
Sie können eine ZIP-Datei aus einer Batchdatei erstellen. Dies kann mit dem Shell.Application-Softwarecode in Microsoft Windows oder über eine Befehlszeile erfolgen, allerdings ist zusätzlicher Code erforderlich. Beispiel:Antwort von Ansgar Wiechers auf die Frage von user2868186enthält Code (unten), der solide aussieht. Alternativ:Rob Vanderwoudes Seite zu VBSzeigt auch eine Lösung.
Ihnen gefällt vielleicht nicht die Idee, diese 8-12 Zeilen (geschätzte Menge) VBScript zu benötigen. Nun, das ist die beste verfügbare Methode, die ich gefunden habe, um Dinge zu automatisieren und dabei mit der geringsten Menge an Code zu MS Windows auszukommen. Ich glaube nicht, dass MS Windows (zumindest nicht die Version, nach der Sie fragen) eine Möglichkeit bietet, dies mit weniger Code zu tun.
Wenn Sie diesen Code jedoch regelmäßig hinzufügen möchten, möchten Sie ihn wahrscheinlich herunterladen, anstatt ihn mehr als einmal einzugeben. Und wenn Sie ihn herunterladen, würde ich vorschlagen, dass Sie genauso gut einen anderen Code herunterladen können, beispielsweise 7-Zip oder Info-Zip. Bei 7-Zip dauert es möglicherweise etwas länger, bis man lernt, wie man es über die Befehlszeile verwendet, aber ich hatte damit Erfolg. Und wenn Sie dies nicht mehr als einmal tun möchten, ist das wahrscheinlich ein weiterer Grund, warum das einmalige Hinzufügen von Software auf lange Sicht wahrscheinlich eine gute Lösung wäre (minimaler Zeitaufwand, langfristiger Nutzen). Ich verstehe, dass die Verwendung einer solchen Software nicht genau das ist, wonach Sie gefragt haben, aber ich bringe das trotzdem zur Sprache, weil ich vorschlage, wirklich zu überlegen, ob dies letztendlich die beste Lösung ist.
Platzieren Sie im dritten Schritt Folgendes in einer Batchdatei:
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b) echo %mydate%
Beachten Sie, dass der angezeigte FOR-Befehl aus einer Batchdatei ausgeführt werden soll. Der Versuch, genau denselben Befehl außerhalb einer Batchdatei auszuführen, funktioniert nicht so gut. Ich habe es unter Win7 SP1 getestet. Ich habe keinen 2003 R2-Server zur Hand, um das zu testen, aber ich vermute, dass dieser Ansatz für Sie gut funktionieren wird.
Ich danke hiermitJays Antwort auf Rorys Frage zur Zeitfür die Grundlage dieses Ansatzes.