Automatisieren einer Ordnersicherungsaufgabe (komprimieren, verschieben, dann gemäß Namenskonvention umbenennen)

Automatisieren einer Ordnersicherungsaufgabe (komprimieren, verschieben, dann gemäß Namenskonvention umbenennen)

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.batkopieren 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.exebackup_stuff.bat-7za.exe7za%~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.exewodurch 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.

verwandte Informationen