Logo

Batch: Backup-Script zur Verzeichnissynchronisation

Mit einem kleinen Batch-Script und dem windowseigenen Kopiertool Robocopy lässt sich ganz einfach eine Verzeichnissynchronisation ausführen. Ideal für ein Backup, z.B. zur Sicherung der eigenen Dateien auf eine externe Festplatte. Robocopy lässt sich umfassend durch Übergabeparameter steuern und eignet sich daher ideal für den automatisierten Einsatz per Batch-Script. Das Script kann manuell bei Bedarf ausgeführt werden oder automatisch per Aufgabenplanung (z.B. täglich, wöchentlich, bei jedem Herunterfahren des PC).

Vorbereitung

Bevor das Script einsatzfähig ist, müsst ihr das Quell- und Zielverzeichnis in die Scriptdatei eintragen: Bearbeitet die Datei per Rechtsklick → Bearbeiten. Tragt Quell- und Zielverzeichnis ein und speichert die Änderungen an der Datei. Beispiel 1:

SET quelle=C:\Users\maier\Documents
SET ziel=G:\Backup

Wichtig: Es wird kein abschließender Backslash \ angegeben. Außer man möchte ein komplettes Laufwerk kopieren (also z.B. D:\). Außerdem müssen Verzeichnisse die ein Leerzeichen enthalten mit Anführungsstriche umschlossen werden. Beispiel 2:

SET quelle=D:\
SET ziel="H:\Verzeichnis mit Leerzeichen"

Funktionsweise

Und so arbeitet das hier vorgestellte Script:

  1. Quell- und Zielverzeichnis werden auf Existenz geprüft. Bei einem Fehler bricht das Programm mit einer Fehlermeldung ab.
  2. Robocopy wird in einer gebräuchlichen Standardkonfiguration ausgeführt und synchronisiert das Ziel komplett mit der Quelle. Das Ziel wird also dabei in denselben Zustand wie die Quelle gebracht. Das heißt, neue Dateien werden kopiert, nicht mehr vorhandene Dateien in der Quelle werden auch im Ziel gelöscht, neuere Dateien in der Quelle überschreiben ältere Versionen im Ziel. Es werden auch leere Verzeichnisse kopiert. Zeitstempel und Dateiattribute der Dateien und Verzeichnisse werden übernommen, nicht jedoch Besitzer oder NTFS ACLs. Dadurch werden Probleme beim Wiederherstellen auf einem anderen PC oder nach einer Windows-Neuinstallation vermieden. (Wenn ihr lieber sämtliche Dateieigenschaften inklusive NTFS Sicherheitsflags kopieren möchtet, löscht einfach den Parameter /COPY:DAT). Lässt sich eine Dateioperation nicht ausführen, versucht es Robocopy bis zu drei Mal mit je 20 Sekunden Wartezeit dazwischen.
    ROBOCOPY %quelle% %ziel% /COPY:DAT /MIR /R:3 /W:20

    Das Verhalten lässt sich über die entsprechenden Parameter beeinflussen. Sollte eine einzelne Operation fehlschlagen, wird die Synchronisierung trotzdem zu Ende geführt und eine entsprechende Fehlermeldung ausgegeben.

Hinweise

  • Zusätzlich zur optischen Ausgabe werden Fehlermeldungen auch mit Zeitstempel in ein Logfile geschrieben, das im selben Ordner erstellt wird, in dem die Scriptdatei liegt.
  • Robocopy ist seit Windows Vista vorinstalliert. Sollte es tatsächlich noch Windows XP User geben: Unter Win XP müssen erst noch die Windows Server 2003 Resource Kit Tools installiert werden.

Download “FolderSync” FolderSync-20160303.zip – 4856-mal heruntergeladen – 1 KB

11 Kommentare

Mi
24. Oktober 2014 um 20:49 Uhr

Hallo

ich finde Ihre Batch Backup Script super ich habe aber das Problem dass ich eine Ganze Festplatte kopieren will also Quelle H:\ und Ziehl V:\ und das gibt ne fehlermeldung!
Können Sie mir da weiterhelfen?

Aufschnürer
21. November 2014 um 14:57 Uhr

Hallo und sorry für die verspätete Antwort. Wichtig ist, dass kein abschließender Backslash \ bei den Verzeichnissen angegeben wird. Außer man möchte die komplette Festplatte/Partition sichern (also z.B. D:\). Das Problem war aber noch etwas anderes. Die Verzeichnisvariablen waren bisher immer fest in Anführungszeichen umschlossen, das führt jedoch in manchen Fällen zu Fehlern. Deshalb habe ich das Script angepasst und Hinweise zu den Verzeichnisangaben hinzugefügt. Die neue Version steht zum Download bereit. Damit müsste jetzt auch H:\ und V:\ funktionieren.

Stefan
2. Januar 2016 um 17:07 Uhr

Hallo, leider funktioniert der Download-Link nicht mehr. Es kommt die Fehlermeldung
Diese Webseite ist nicht verfügbar.

ERR_CONNECTION_RESET

Aufschnürer
3. März 2016 um 09:31 Uhr

Hallo Stefan,
das war wohl ein vorübergehender Fehler. Bei mir funktioniert der Download von verschiedenen Computern/Standorten aus ohne Probleme.
Grüße

Zack117
2. März 2016 um 14:59 Uhr

Vielen Dank für den verständlichen Artikel und das Script.

Ich hätte da eine Frage zu deinen verwendeten Parametern, um genau zu sein „/s“, „/e“ und „/purge“

Weshalb hast du die in das Script inkludiert, wenn /mir so ziemlich macht. Und kollidiert /mir (bzw /e) nicht mit /s?

Aufschnürer
3. März 2016 um 10:08 Uhr

Danke für den Hinweis! Ich habe das Script jetzt korrigiert und /s /e /purge entfernt.

Trevor
10. Januar 2017 um 12:50 Uhr

Hi,
dein Artikel ist super, aber ich finde das er ein wenig irreführend ist.
Was du beschreibst ist leider keine synchronisation im klassischen Sinne, denn die bedarf eine two-way synchronisation.
Dein script ist dann doch eher ein Backup. (auch wenn es gespiegelt ist).

Trotzdem natuerlich Daumen hoch für den Artikel. Kannst dir sicher denken wie ich hierher gefunden habe. Daher auch die Anmerkung.

Mach weiter so,

LG

Aufschnürer
11. Januar 2017 um 11:09 Uhr

Hallo Trevor,
danke für dein Feedback! Bei der Definition kann man es natürlich aus verschiedenen Blickwinkeln betrachten. Eine Datensynchronisation muss aber nicht zwingend two-way sein. Wikipedia hat das schön zusammengefasst:

„Man unterscheidet unidirektionale Synchronisation, bei der die Daten eines Teilsystems bevorzugt behandelt werden, von bidirektionaler Synchronisation, bei der die Daten aller Teilsysteme gleichwertig sind.“

Dieses Backup-Skript entspricht der unidirektionale Synchronisation, auch wenn das im Endeffekt dann einer einfachen Spiegelung gleich kommt. Das Ziel wurde dann schlicht mit der Quelle synchronisiert.
Viele Grüße

Sebastian
5. Februar 2017 um 11:02 Uhr

Dein Skript ist bei einem Verzeichnis sehr gut geeignet, doch was ist wenn ich (vor allem bei einem Backup) mehrere Verzeichnisse sichern möchte? Gibt es eine elegante Möglichkeit dein Skript dahingehend zu erweitern oder muss ich tatsächlich für jedes Verzeichnis ein Batch-File anlegen?

Aufschnürer
8. Februar 2017 um 13:27 Uhr

Hallo Sebastian, danke für dein Feedback! Das Script ließe sich noch mit einer Schleife erweitern, mir fehlt momentan aber die Zeit dafür. Da ich bereits ein Backup-Script mit AutoIt geschrieben habe, welches diese Funktion bereits mitbringt, werde ich das wohl demnächst veröffentlichen.

Vincent Warte
25. Februar 2017 um 15:46 Uhr

Hallo,

vielen Dank für das Script. Ich habe aber eine kurze Frage zur Erweiterung des Scripts. Folgendes möchte ich tun:

Meine Quelle ist C:\Daten\Excel_Dateien\

Ich möchte diesen Ordner jede Nacht backupen, aber so, dass der ganze Ordner quasi auf das Backup-Medium kopiert wird, und dort quasi parallel mehrere Ordner „Excel_Dateien“ abgelegt werden, und zwar mit Datum im Ordnernamen.

Zielordner sollen also entsprechend des Backup-Datums so aussehen:

Backup vom 25.02.2017:
D:\Backup\Excel_Dateien_25_02_2017\

Backup vom 26.02.2017:
D:\Backup\Excel_Dateien_26_02_2017\

Backup vom 27.02.2017:
D:\Backup\Excel_Dateien_27_02_2017\

Und so weiter. Wie müsste das Script ergänzt werden, bzw. wie würde die finale Version dann aussehen?

Danach würde ich mit einem weiteren Script Ordner in D:\Backup\ die älter als 2 Wochen alt sind löschen lassen.

Ich freue mich auf eine Antwort.

MfG,
Vincent



Sag' deine Meinung