Backup mittels 7-Zip

7-Zip Logo

Der beliebte Open Source Packer 7-Zip steht mittlerweile in Version 16.00 zum Download (32-bit, 64-bit) bereit.

Man kann 7-Zip aber auch hervorragend zum Sichern von Dateien und Ordnern verwenden.

Schritt 1: Man benötigt die beiden Dateien 7z.exe und 7-zip.dll aus dem 7-Zip Ordner.

Schritt 2: In der files.txt werden die Pfade der zu sichernden Ordner bzw. Dateien abgelegt.

"C:\Programme\Test"
"D:\Software\OS\Linux\ubuntu-9.04-desktop-i386.iso"

Schritt 3: Die Batchdatei backup.bat wird später das Backup starten.

7z u %date%_backup.7z -up1q3r2x1y2z1w2 -ssw @files.txt

Nach dem Aufruf der 7z.exe mit dem Parameter u (update) folgt der Name des Zielarchivs, welches in meinem Beispiel immer mit dem aktuellen Datum versehen wird. Der anschließende Ausdruck sorgt dafür, dass neue Dateien hinzugefügt, geänderte Dateien upgedated und gelöschte Dateien aus dem Backup gelöscht werden. -sww erlaubt den Zugriff auf geöffnete Dateien. Zum Schluss wird die files.txt mit allen Quellen importiert.

Schritt 4: Um beispielsweise jeden Tag vollautomatisch ein Backup erstellen zu lassen, kann man die Batchdatei in „Geplante Tasks“ aufnehmen. Dazu muss die backup.bat allerdings noch angepasst werden. Es muss der vollständige Pfad zur 7z.exe und zur files.txt angegeben werden, da sonst der Task nicht erfolgreich ausgeführt werden kann.

Bei der Ausführung mittels „Geplante Tasks“ wird allerdings das DOS-Fenster sichtbar. Um dies zu unterdrücken, kann man die Datei task.vbs anstatt der backup.bat ausführen. Funktioniert aber nur unter XP! Das kleine Script bietet die Möglichkeit, das Backup völlig im Hintergrund oder minimiert zu starten. Je nachdem was gewünscht ist, sollte man die andere Methode mit am Zeilenanfang auskommentieren, da die Batchdatei ansonsten zweimal ausgeführt wird.

'komplett unsichtbar starten
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("backup.bat", 0, True)
Set WshShell = Nothing

'minimiert starten
'Dim Shell: Set Shell = WScript.CreateObject ("WSCript.shell")
'shell.run "backup.bat",7,1

Download 7-Zip Backup Kit


Changelog:

  • 15.05.2016:
    – 7-Zip 16.00 integriert
  • 19.11.2009:
    – Blogeintrag aktualisiert
    – 64bit-Version hinzugefügt
  • 17.08.2009:
    – 7-Zip-Files auf Version 9.06 upgedated
    – readme.txt hinzugefügt
  • 06.07.2009:
    – Möglichkeit für minimiertes Ausführen mittels „Geplante Tasks“  hinzugefügt (task.vbs)
    – Kleinen Fehler in der Backup.bat behoben
  • 27.05.2009:
    – erste Version

Tobi

Hallo, mein Name ist Tobias und ich habe diesen Blog im April 2009 ins Leben gerufen. Seitdem blogge ich hier über Software, Internet, Windows und andere Themen, die mich interessieren. SSDblog ist mein zweiter Blog, indem es rund um das Thema SSDs geht. Ich würde mich freuen, wenn ihr meinen Feed abonniert oder mir auf Twitter, Facebook, Google+ und Google+ (privat) folgt.

17 Antworten

  1. Rudolf sagt:

    Dateiname in der files.txt darf kein Blank enthalten. in folgendem Besipiel wird der 2. Ordner nicht verarbeitet:

    „E:\Archive“
    „E:\eigene Dateien“

    • Mario sagt:

      Das stimmt.
      Ich habe deshalb den Quell- und Zielpfad über „set“ im Batch-Script auf eine Variable gelegt.
      Außerdem habe ich noch den Archivnamen anders festgelegt,
      da ich nur Vollsicherungen mache.

      Sieht dann (in Auszügen) so aus:

      set quelle=“D:\Eigene Dateien\“
      set ziel=“X:\Sicherungen\EGDat\“
      set name=“DS1-%date:~-10,2%-%date:~-7,2%-%date:~-4%-%time:~0,2%-%time:~3,2%.zip“
      7z a -tzip %ziel%%name% %quelle%

  2. Mirco sagt:

    Hi,

    erstmal danke für das Script sowas hab ich echt lange gesucht. Nun stehe ich vor dem Problem, wie bekomme ich es den hin, das 7Zip mir die Dateien auf ein Netzlaufwerk speichert?

    Mirco

    • Tobi sagt:

      Einfach das Netzlaufwerk mappen und den Befehl in der backup.bat ändern. Würde dann so aussehen, wenn das Netzlaufwerk als X verknüpft ist:

      7z u X:\backup.7z -up1q3r2x1y2z1w2 -ssw @files.txt

    • Mirco sagt:

      Danke für die Schnelle Antwort. Ich habe es jetzt über Variablen gelöst. Manchmal sieht man den Wald vor lauter Bäumen nicht 😉 Ich habe noch folgendes hinzugefügt:

      7z a -mx9

      a = Archiv anlegen
      mx9 = Maximum Compression

      Danke nochmal.

  3. soundso sagt:

    Hallo,

    wie kann ich denn für die backups eine logdatei anlegen?

    Gruß und Danke

    • Mario sagt:

      Hallo,

      die Ausgabe der Konsole kann man in eine Datei umleiten.
      Ich mache das über eine Variable, die ich setze:

      set log=“EGDatUpdate.log“
      (Variable „log“ den Wert „EGDatUpdate.log“ zuweisen, die Datei liegt dann im selben Verzeichnis wie das Batch-Skript)

      Dann alle umzuleitenden Zeilen mit „>>%log%“ abschließen:

      […]
      echo Backup am %date% um %time:~0,2%-%time:~3,2% >>%log%
      echo ================================================ >%log%
      echo. >>%log%
      […]

  4. soundso sagt:

    … und noch eine Frage:
    Wenn man das Backup über geplante Tasks automatisch ausführen will steht oben ein Hinweis, dass man die Verknüpfung zu 7z.exe und 7z.dll herstellen muss. Wie setz ich das um?

    Danke nochmal

    • Tobi sagt:

      Vermutlich hast du in deiner Batchdatei nur „7z“ stehen.
      Einfach den kompletten Pfad zu der Datei setzen, dann sollte es klappen.

      Meine Batchdatei sieht beispielsweise so aus:

      E:\Programme\7zip_backup\7z.exe u D:/%date%_backup.7z -up1q3r2x1y2z1w2 -ssw -ms=off -mx0 @E:\Programme\7zip_backup\files.txt

    • Mario sagt:

      Hallo,

      habe das gerade probiert, bei mir funktioniert das ohne Probleme.
      Folgende Konfiguration:

      Das Batch-Skript liegt im Programmordner von 7-Zip:
      C:\Programme\7-Zip\

      Über den Taskplaner wähle ich als auszuführendes Programm das Batch-Skript aus:
      „C:\Programme\7-Zip\EGDatUpdateTEST.bat“

      Betriebssystem:
      Windows XP Home Edition SP3

      7-Zip Version: 9.10beta

      Und wo wir einmal dabei sind, mein Test-Skript:

      @ECHO OFF
      echo.
      echo Backup mit Batch und 7Zip
      echo Quellverzeichnis wird komplett in Archiv gepackt
      echo ================================================
      echo.

      : Quell-Verzeichnis festlegen [Backslash (\) nicht vergessen!!]

      set quelle=“D:\Eigene Dateien\Downloads\“

      : Ziel-Verzeichnis festlegen [Backslash (\) nicht vergessen!!]

      set ziel=“D:\EGDatTEST\“

      : Log-Datei festlegen

      set log=“EGDatUpdateTEST.log“

      : Nur ein Verzeichnis pro Auftrag
      : Bei Leerzeichen im Pfad mit Anführungszeichen angeben

      : In die Log-Datei Datum und Zeit eintragen

      echo Backup am %date% um %time:~0,2%-%time:~3,2% >>%log%
      echo ================================================ >>%log%
      echo. >>%log%

      : Name fuer Zieldatei festlegen
      set name=“SichEgDat.7z“

      : Archiv erstellen (erst aufschreiben, dann anzeigen, dann loslegen)
      echo Erstellen von %ziel%%name% >>%log%
      echo ZIP-Archiv wird erstellt. Bitte warten…
      echo.

      7z u -t7z %ziel%%name% -up1q3r2x1y2z1w2 -ssw %quelle% -ms=off -mx=0 -mmt=2 >>%log%

      echo …fertig

      : Ende in Log-Datei eintragen
      echo ++++ ENDE am %date% um %time:~0,2%-%time:~3,2% ++++ >>%log%
      echo. >>%log%

      pause

      Nach einem Durchlauf sieht die Log-Datei so aus:

      Backup am 07.08.2010 um 11-25
      ================================================

      Erstellen von „D:\EGDatTEST\““SichEgDat.7z“

      7-Zip 9.10 beta Copyright (c) 1999-2009 Igor Pavlov 2009-12-22
      Scanning

      Creating archive D:\EGDatTEST\SichEgDat.7z

      Compressing Downloads\Sharp MD-SR 50H, 60H MD portable.part1.rar

      Everything is Ok
      ++++ ENDE am 07.08.2010 um 11-25 ++++

  5. soundso sagt:

    Merci!

    Das sieht auf den ersten Eindruck sehr gut aus. Bei mir liegt die Batch-Datei auch nicht im 7zip-Programmordner. Ich leg die *.bat-Dateien immer mit auf den Server, wo die Backups dann auch hinkommen, in einen Ordner nebenan. Dann hab ich die gleich wieder falls mit meinem Rechner mal was ist.
    Bisher hab ich allerdings nur mit robocopy gearbeitet, was ich übrigens auch sehr empfehlen kann. Ich möchte nur auch mein eMail-Archiv sichern und *.pst-Dateien sind aus mir unbekannten Gründen am Server nicht erlaubt ;-(. Deshalb der „Umweg“ über die Komprimierung.
    Leider hab ich jetzt 3 Wochen Urlaub… na ja, ich werds verkraften, aber freu mich schon an meinem Backup weiterzubasteln.

    So long and thanx for all the shoes….

  6. tatoosh sagt:

    Hi,

    danke für den Post.
    Kannst du nochmal kurz alle angegebenen Parameter erläutern: „-up1q3r2x1y2z1w2“?

    Gruß tatoosh

    • Tobi sagt:

      Ich versuche es:

      „-u“ aktualisiert alle das Archiv bzw. erstellt ein neues, wenn der angegebene Archivname noch nicht existiert.
      Danach folgt jeweils ein Buchstabe und eine Zahl. Der Buchstabe beschreibt den Status der jeweiligen Datei und die Zahl gibt an, was mit dieser Datei passieren soll. Hier eine Übersicht:

      p: File exists in archive, but is not matched with wildcard.
      q: File exists in archive, but doesn’t exist on disk.
      r: File doesn’t exist in archive, but exists on disk.
      x: File in archive is newer than the file on disk.
      y: File in archive is older than the file on disk.
      z: File in archive is same as the file on disk.
      w: Can not be detected what file is newer (times are the same, sizes are different).

      0: Ignore file (don’t create item in new archive for this file).
      1: Copy file (copy from old archive to new).
      2: Compress (compress file from disk to new archive).
      3: Create Anti-item (item that will delete file or directory during extracting). This feature is supported only in 7z format.

      Die Infos stammen übrigens aus der Hilfe-Datei „7-zip.chm“.

  7. Kadi sagt:

    Hallo Tobi,

    super Möglichkeit für ein einfaches schnelles Backup, Danke!

    Ich habe nur ein Problem: meine Backup.7z ist verschlüsselt (Passwort bei Erstellung des Archivs angegeben – mit 7zip mit GUI erstellt) und soll es eigentlich auch bleiben. Nachdem ich aber über die Batch upgedated habe, ist die Ordnerstruktur auf einmal sichtbar und alle ersetzten oder neuen Dateien unverschlüsselt (nur die unverändert im Archiv verbleibenden Dateien sind zumindest nicht ohne Passwort entpackbar).

    Muss/kann man das bei Erstellung des Archivs schon irgendwie berücksichtigen? Oder kann man der Batch sagen, dass sie verschlüsselt synchronisiert?

    Ich weiß, der Eintrag hier ist schon etwas älter – aber vielleicht liest das ja doch jemand und kann mir helfen. Vielen Dank schon mal!!!

    • Tobi sagt:

      Das sollte kein Problem sein. Probier mal folgendes aus:
      7z u %date%_backup.7z -up1q3r2x1y2z1w2 -ssw -mhe -pPASSWORT @files.txt
      „PASSWORT“ musst du dann noch durch dein Passwort ersetzen.

    • Kadi sagt:

      Super! Funktioniert toll – vielen, vielen Dank!!!!

      (vorallem für die rasend schnelle Antwort!)

  1. 14. April 2010

    […] noch, dass wenn NTBackup ein Backup erstellt hat es mit 7zip direkt danach komprimiert wird. Bei antary bin ich dann auf ein nützliches Script gestoßen, was genau das […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.