Dateien mit robocopy kopieren

Diese Anleitung stammt von http://www.wintotal.de/artikel/artikel-2007/91.html.

Was ist Robocopy?

Robocopy ist ein mächtiges Kommandozeilen-Kopier-Programm. Es dient dazu, inkrementelle Backups von einem Ort an einem anderen zu erstellen. Die Handhabung mag anhand der unzähligen, teils kryptisch anmutenden Parameter etwas umständlich erscheinen. Ein einfaches Backup Ihrer wichtigsten Daten lässt sich trotzdem in sehr kurzer Zeit bewerkstelligen, da es reicht, einen Bruchteil dieser Parameter zu kennen. Über den Taskplaner bzw. die Aufgabenplanung können die Synchronisationsvorgänge sogar automatisiert werden.
Wie bereits gesagt, arbeitet Robocopy inkrementell. Es werden also nur neue oder geänderte Dateien berücksichtigt, was den Kopiervorgang um ein Vielfaches beschleunigen kann. Als Grundlage für diese Entscheidung dienen Robocopy zum einen der Zeitpunkt der letzten Änderung der Datei und zum anderen die Größe der Datei.

Wo bekomme ich Robocopy?

Robocopy ist ab Windows Vista im Betriebssystems enthalten.

Vorteile von Robocopy gegenüber copy und xcopy

Viele Anwender werden sich nun fragen: Wozu brauche ich Robocopy? Ich habe doch copy und xcopy. Diese zwei Tools sind zwar für viele alltägliche Kopiervorgänge die richtigen, wenn es jedoch darum geht, ein inkrementelles Backup anzulegen, versagen beide. Copy kann nur Inhalte der obersten Ebene kopieren und berücksichtigt Unterordner überhaupt nicht. Xcopy kann mit dem Parameter /s zwar auch Unterordner und deren Dateien berücksichtigen, jedoch keine inkrementelle Kopie anfertigen. So dauert ein Kopiervorgang, der mehrere GB an Daten beinhaltet, immer sehr lange, da grundsätzlich alle Dateien erneut kopiert werden. Außerdem werden keinerlei Dateien im Archivordner gelöscht, auch wenn sie im Quellordner nicht mehr vorhanden sind. Hier kommt Robocopy ins Spiel. Robocopy berücksichtigt neue, geänderte und auch gelöschte Dateien. Dabei ist jedoch Vorsicht geboten. Wenn Sie im Quellordner versehentlich eine Datei gelöscht haben und danach Ihr Backup aktualisieren, wird diese Datei auch in Ihrem Backup nicht mehr vorhanden sein, da Robocopy nicht mehr vorhandene Dateien der Quelle ohne Nachfrage auch im Ziel löscht.

Wie lege ich ein Backup an?

Prinzipiell benötigen Sie zum Anlegen eines Backups nur einen einzigen Parameter von Robocopy. Dieser Parameter lautet /MIR (Mirror). /MIR legt eine Spiegelung der Struktur der Quelle in einem von Ihnen vorgegebenen Archiv-Ordner an. /MIR besteht eigentlich aus zwei Parametern von Robocopy. /E und /PURGE. /E kopiert alle vollen und auch leeren Unterverzeichnisse, /PURGE löscht alle Dateien im Zielordner, die in der Quelle nicht mehr vorhanden sind. Die Struktur des Befehls muss aussehen wie folgt:

robocopy [Quelle] [Ziel] /MIR

Falls Ihre Pfade Leerzeichen enthalten, muss der Pfad in Anführungszeichen gesetzt werden. Konkretes Beispiel. Sie wollen den Inhalt des Ordners C:Meine Musik in den Ordner D:BackupMeine Musik spiegeln. Dazu muss der Befehl lauten:

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /MIR

Dieser Befehl kann sowohl zum erstmaligen Anlegen eines Backups verwendet werden als auch für die nachfolgenden Aktualisierungen. Standardmäßig ergänzt Robocopy diese Eingabe um weitere Parameter. So wird aus unserer Befehlszeile von Robocopy folgender Befehl generiert:

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /S /E /COPY:DAT /PURGE /MIR /R:1000000 /W:30

Einige Parameter

Generell können Sie die Parameter von Robocopy abfragen, indem Sie ein Kommandozeilenfenster öffnen (Start -> Ausführen -> cmd) und dort folgende Zeile tippen: robocopy /?

Der Befehl /COPY:COPYFLAG[S]

Wie in unserer Beispielzeile zu sehen, verwendet Robocopy standardmäßig den Befehl /COPY:DAT. Die Parameter von /COPY im Einzelnen lauten:

  • D=Data (Datei-Inhalt)
  • A=Attributes (Attribute wie etwa versteckt, schreibgeschützt etc.)
  • T=Timestamps (Zeitstempel, also Erstellungsdatum, Änderungsdatum und Datum des letzten Zugriffs)

Weitere Parameter von Copy:

  • S=Security=NTFS ACLs. Hier werden die in den NTFS ACLs untergebrachten Zugriffsrechte mit kopiert. Da den heutigen Dateisystemen meist NTFS zugrunde liegt, kann das durchaus sinnvoll sein. Der Parameter /SEC hat die gleiche Funktion.
  • O=Owner info. Zusätzlich zu den Benutzerrechten kann Robocopy auch den Besitzer kopieren. Der Parameter /O erledigt das.
  • U=aUditing info. Dieser Parameter bewirkt, dass auch die Überwachungsoptionen mit kopiert werden.

Statt der Eingabe von COPY:DATSOU kann auch /COPYALL verwendet werden.
Es ist auch möglich, keinerlei Dateiinformationen zu kopieren. Gerade bei der ausschließlichen Verwendung von /PURGE ist das sinnvoll. Der dafür zuständige Parameter lautet /NOCOPY.

Für den Heimanwender wird die von Robocopy ergänzte Default-Einstellung COPY:DAT wohl ausreichen, für Systemadministratoren können sich die weiteren Parameter jedoch als durchaus sinnvoll erweisen.

Die Parameter /R:n und /W:n

Wie an der obigen Beispielzeile zu sehen ist, hat Robocopy auch hier bereits Default-Werte eingetragen. /R:n gibt die Anzahl der Wiederholungen an, die Robocopy unternimmt, falls ein Kopiervorgang nicht erfolgreich war. /W:n gibt die Wartezeit in Sekunden an, die pausiert wird, wenn ein Kopiervorgang nicht erfolgreich war. Mit der Default-Einstellung (/R:1000000 /W:30) wird Robocopy also bis zu 347 Tage lang einen erfolglosen Kopiervorgang fortsetzen.

Die Filterfunktionen /XF /XD

Bisher werden in unserem Beispiel-Backup alle Dateien und Unterordner kopiert. Jedoch kann es auch schon mal nötig sein, Verzeichnisse oder Dateien vom Backup auszuschließen. Auch hier gibt es entsprechende Parameter. /XF exkludiert Dateien oder Dateitypen, die von Ihnen angegeben werden können. Auch Wildcards werden hier unterstützt. Nehmen wir für unser Beispiel an, Sie möchten keine Playlists in Ihr Backup aufnehmen. Die Playlisten haben das Format m3u. Unsere Befehlszeile müsste also lauten wie folgt:

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /MIR /XF *.m3u

Um komplette Ordner aus dem Backup auszuschließen, wird der Parameter /XD benötigt. Für unser Beispiel existiert im Ordner C:Meine Musik der Unterordner mit dem Namen Dokumente. Die Befehlszeile, um den Ordner Dokumente nicht mit einzuschließen, müsste lauten:

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /MIR /XD „C:Meine MusikDokumente“

Eine Kombination der beiden Parameter ist natürlich auch möglich, damit weder die Playlisten noch der Ordner Dokumente kopiert werden.

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /MIR /XF *.m3u /XD „C:Meine MusikDokumente“

Bei den Dateifiltern gibt es noch eine Vielzahl anderer Parameter, um die Menge der zu kopierenden Dateien zu minimieren. Diese Parameter sind jedoch meist nicht nötig und werden daher an dieser Stelle vernachlässigt.

Die Logfunktion /LOG

Gerade für automatisierte Backups kann sich eine Logfunktion als nützlich erweisen, da dort nachgesehen werden kann, ob es zu Fehlern kam während des Backups oder was überhaupt gemacht wurde. Natürlich unterstützt Robocopy auch das Anlegen von Logdateien. Mit dem Parameter /LOG:[Dateiname] wird an der vorgegebenen Stelle eine Logdatei von Robocopy angelegt. Mit /LOG+:[Dateiname] wird eine vorhandene Logdatei fortgeführt. Sollte die Logdatei noch nicht existieren beim erstmaligen Ausführen der Befehlszeile, wird sie auch bei /LOG+:[Dateiname] neu angelegt. Wenn wir also unter C:Logs eine Logdatei des Kopiervorgangs anlegen wollen, muss die Befehlszeile wie folgt ausschauen:

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /MIR /XF *.m3u /XD „C:Meine MusikDokumente“ /LOG+:C:Logsmusik.log

Die normale Logfunktion von Robocopy schreibt allerdings jegliche Rückmeldung in die Logdatei, was diese sehr unübersichtlich gestaltet. Natürlich gibt es auch hier Parameter, die Abhilfe schaffen. Wenn noch ein /NP ergänzt wird, werden keine Fortschrittsinformationen in der Logdatei protokolliert. Mit /NFL werden Dateinamen nicht protokolliert, mit /NDL werden auch keine Verzeichnisse in die Logdatei eingetragen. Mit dem Parameter /NJH wird kein Auftragsheader in der Protokolldatei erzeugt, mit /NJS auch keine Zusammenfassung. Probieren Sie mit diesen Parametern am besten ein wenig aus.

Mit dem Parameter /TEE werden die Informationen sowohl in die Kommandozeile als auch in die Logdatei geschrieben. Mit /V können auch die Dateien protokolliert werden, die auf beiden Seiten identisch waren und daher übersprungen wurden.

Die Probierfunktion /L

Für alle, die erst einmal sehen möchten, was genau passieren würde, wenn Sie Robocopy mit den von Ihnen angegebenen Befehlen laufen lassen würden, bietet Robocopy eine Probierfunktion. Mit dem Parameter /L wird nur angezeigt, was Robocopy im Fall der Fälle tun würde. Ausgehend von unserem Beispiel müsste die Befehlszeile nun so aussehen:

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /MIR /XF *.m3u /XD „C:Meine MusikDokumente“ /LOG+:C:Logsmusik.log /L

Natürlich können alle zuvor genannten Parameter auch kombiniert werden. Eine mögliche Befehlszeile könnte also auch so aussehen:

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /MIR /XF *.m3u /XD „C:Meine MusikDokumente“ /LOG+: C:Logsmusik.log /NP /TEE /V /L

Die Monitor-Funktion /MON:n /MOT:n

Robocopy kann auch dauerhaft im Hintergrund werkeln. Dazu besitzt das Tool eine Monitor-Funktion, die mit zwei verschiedenen Parametern angesprochen werden kann. /MON:n bewirkt, dass Robocopy das Backup nach n Änderungen aktualisiert. Wenn Sie dort also eine 5 eintragen, wird Robocopy nach 5 Änderungen im Quellverzeichnis aktiv und aktualisiert Ihr Backup. /MOT:n lässt Robocopy nach n Minuten wieder aktiv werden. Wenn Sie /MON:n ohne Angabe von /MOT:n verwenden, setzt Robocopy als Zeitspanne eine Minute.

Sie können die Monitor-Funktion auch nur zu einer bestimmten Uhrzeit laufen lassen, dafür ist der Parameter /RH zuständig. Die Eingabe erfolgt im Format /RH:hhmm-hhmm. Um die Monitor-Funktion bspw. nur zwischen 18 und 20 Uhr laufen zu lassen, könnte eine Befehlszeile aussehen wie folgt:

robocopy „C:Meine Musik“ „D:BackupMeine Musik“ /MIR /XF *.m3u /XD „C:Meine MusikDokumente“ /LOG+: C:Logsmusik.log /NP /TEE /V /MON:2 /RH:1800-2000

 

Ausgewählte Parameter im Überblick

/COPY:copyflag[s] Standard-Einstellung: /COPY:DAT
D: Datei-Inhalte S:NTFS ACLs
A: Attribute O: Besitzer
T: Zeitstempel U: Überwachungsinfo
/SEC äquivalent zu /COPY:DATS
/COPYALL kopiert alle Datei-Informationen – äquivalent zu COPY:DATSOU
/NOCOPY keinerlei Datei-Informationen werden kopiert
/E kopiert Unterverzeichnisse, auch die leeren
/PURGE löscht Dateien und Verzeichnisse im Ziel, die in der Quelle nicht mehr existieren
/MIR Spiegelung anlegen – Zusammenfassung von /E und /PURGE
/MON:n nach n Änderungen wird Robocopy automatisch wieder aktiv
/MOT:n nach n Minuten wird Robocopy automatisch wieder aktiv.
/RH:hhmm-hhmm Zeitraum, in dem Robocopy aktiv wird
/XF bestimmte Dateitypen von der Spiegelung ausschließen
/XD bestimmte Verzeichnisse von der Spiegelung ausschließen
/R:n Es werden n Versuche unternommen, den Vorgang erfolgreich abzuschließen (Standard: 1000000).
/W:n die Wartezeit nach einem erfolglosen Kopiervorgang (Standard 30)
/L den Probiermodus von Robocopy aktivieren
/LOG: bei jedem Syncvorgang eine neue Logdatei anlegen lassen
/LOG+: eine bestehende Logdatei fortführen
/NP keine Fortschrittsinformationen anzeigen
/TEE Informationen sowohl auf dem Bildschirm als auch in der Logdatei ausgeben

Praktisches Beispiel:

robocopy „\Quelle“ „\Ziel“ /MIR /XF *.mp3 /R:5 /W:5 /LOG+:C:tempRobocoppy.log /NP

Kopiere alle Dateien von der Quelle zum Ziel. Mit XF werden alle mp3s weggelassen. Es wird 5 Wiederholungen geben, wenn der Kopiervorgang nicht erfolgreich ist. Das Skript wartet dazwischen 5 Sekunden. Die Logdatei befindet sich unter C:Temp.