Leserartikel Einfaches Ordner-Backup über robocopy

JensS.

Commodore
Registriert
Nov. 2009
Beiträge
4.436
Moin,
vielleicht kann ja wer noch Nutzen draus ziehen, ich hab's mir jetzt ohnehin zusammengesucht...

Vorgeplänkel:
Da ich mehrere Verzeichnisse mit Bildern habe, die auf eine externe Festplatte synchronisiert werden sollen, musste eine einfache Lösung dafür her.
Mir reicht dabei ein ordnerweises Abgleichen, da muss kein supertoller komprimierter, verschlüsselter Container geschrieben werden.

Robocopy
Das ist ein kleines Kommandozeilentool, das bei Windows Vista und 7 enthalten ist - damit lässt sich sowas relativ gut erschlagen.
Bei Windows XP muss es nachinstalliert werden, das ist aber auch kein großes Problem. (Hierzu ganz am Ende)
robocopy ist eigentlich auch nur ein besseres copy - es lassen sich eben ein paar mehr Feinheiten mit einstellen.

Aufgepasst und mitgebaut
Das beißt nicht, keine Sorge. ;)

Eine Batch-Datei kann mit jedem Texteditor angelegt werden, man muss nur beim Speichern die Endung auf .cmd oder .bat setzen, oder wenn das nicht klappt, als .txt speichern und anschließend die Endung anpassen.
Dann wird im Endeffekt mit einem Doppelklick auf die Datei das Backup gestartet - viel komfortabler geht's nicht. :)

Wenn es nur drum geht, einen Ordner auf ein bestimmtes Laufwerk zu sichern, ist das kein Hit, dann muss in der Datei nur folgendes stehen:
Code:
ROBOCOPY <Quelle> <Ziel> [Optionen]
Das sollte sich wohl erschließen :)
'robocopy' ruft die Funktion auf, dann werden Quell- und Zielordner (bzw. -dateien) angegeben und am Schluss können dann weitere Optionen angefügt werden, dazu ein wenig am Schluss.

Also, es gibt mehrere Ordner?
Auch kein Problem!
Code:
ROBOCOPY <Quelle1> <Ziel1> [Optionen]
ROBOCOPY <Quelle2> <Ziel2> [Optionen]
(und so weiter... ;) )
Dann werden alle Ordner nacheinander weg herüberkopiert und Ruhe.

Jetzt möchte man aber vermutlich immer den Abschluss des Kopiervorganges sehen, das ist dann etwas doof, wenn zich tausend Dateien durchgejagt werden.
Also: Pause! .. Nein, jetzt nicht für uns, auch wenn ein Käffchen immer gut ist :D
Code:
ROBOCOPY <Quelle1> <Ziel1>
Pause [Optionen]
ROBOCOPY <Quelle2> <Ziel2> [Optionen]
Pause
Damit bleibt das Fenster auch nach Abschluss des letzten Kopiervorganges offen - nicht unpraktisch. ;)

Jetzt wird es interessant - wechselnde Laufwerksbuchstaben berücksichtigen:
Dazu muss erst einmal abgefragt werden, wohin das ganze soll, das geht über eine Variable und geht dann so:
Code:
@echo Sicherungsziel?
set /p Ziel=

Das '@echo' erzeugt eine Ausgabe im prompt - in dem Fall ein 'Sicherungsziel?' während das darauffolgende 'set /p Ziel=' eine Variable Ziel anlegt und den eingetragenen Wert darauf zuweist.
Diesen Wert kann man dann über %Ziel% wieder abrufen.

Das sieht dann so aus:
Code:
@echo Sicherungsziel?
set /p Ziel=
ROBOCOPY <Quelle> %Ziel%\<eventuelle Unterordner> [Optionen]
Pause

Somit kann als Ziel ein Pfad angegeben werden, im simpelsten Fall also nur ein Laufwerk, wie z.B. 'X:' oder bei Belieben noch ein Ordner dazu, wie 'X:\Backup'
Weitere zu sichernde Ordner können einfach mit angefügt werden.

Optionen
Wer alles haben will, kann sich einfach 'robocopy -?' aufrufen, ich liste hier nur, was lohnenswert ist für solch einen Backup-Job.

/S - Unterverzeichnisse kopieren, leere Verzeichnisse überspringen
/E - Unterverzeichnisse kopieren, leere Verzeichnisse beibehalten
/Purge - Daten, die im Quellverzeichnis gelöscht wurden auch aus Zielverzeichnis entfernen - Hier ist Vorsicht geboten! Wenn man hiermit an wichtige Daten geht, sollte man lieber mit Testjobs prüfen, ob wirklich alles sauber klappt.
/Mir - Kombination aus /E und /Purge um eine Verzeichnisstruktur zu spiegeln
/Move - gesamtes Quellverzeichnis nach dem Kopieren entfernen
/L - für die Testjobs, es wird nur protokolliert, der tatsächliche Datenbestand wird nicht angerührt

Falls beim testen bestimmte Zeilen stören (weil z.B. ein großer Datenbestand durchgeackert wird), aber man diese nicht löschen will, kann ein REM davorgesetzt werden, dann zählt diese Zeile als Kommentar.

Beispiel
Das Script für meinen Kram sieht jetzt so aus:
Code:
@echo Sicherungsziel?
set /p Ziel=
robocopy E:\Bilder\ %Ziel%\Bilder\ /S /Purge
pause
robocopy E:\Lightroom\ %Ziel%\Lightroom\ /S /Purge
pause
robocopy E:\Scans\ %Ziel%\Scans\ /S /Purge
pause
Ich habe /S /Purge, da leere Unterverzeichnisse nicht grundlos leer sind - damit müssen diese nicht kopiert werden. Also, weg damit.

Robocopy unter XP nachinstallieren
Zuerst wird natürlich die entsprechende Datei benötigt. Klingt logisch, oder? ;)
Diese kann zB aus den Windows Server 2003 Resource Kit Tools entnommen werden - die RKTs gibts direkt bei MS Klickmichhart!
Entweder wird jetzt das gesamte Paket installiert oder aber die robocopy.exe extrahiert und unter C:\Windows eingefügt. Anschließend sollte es auch problemlos möglich sein, die hier aufgeführten Scripts zu benutzen.
 
Zuletzt bearbeitet:
Coole Sache ;)

Hab ich bei mir mit meinen Bildern auch gemacht, allerdings wird bei mir auf zwei verschiedene externe FPs gesichert:

Code:
@echo off

set DATUM=%date%

echo Externe FP 1 -------------------------------

call robocopy /LOG:E:\Documents\backupfp1%datum%.txt /MIR /COPYALL /PURGE /NP  /V G:\Pictures H:\#backup\Bilderbackup /XD .V2 /XF NTUSER.DAT ntuser.ini Lightroom 2 Preferences.agprefs

call robocopy /LOG:E:\Documents\backupfp2%datum%.txt /MIR /COPYALL /PURGE /NP  /V G:\Pictures J:\#backup\Bilderbackup /XD .V2 /XF NTUSER.DAT ntuser.ini Lightroom 2 Preferences.agprefs


copy E:\Documents\backupfp1%datum%.txt E:\Documents\backup\EFP1
copy E:\Documents\backupfp2%datum%.txt E:\Documents\backup\EFP2

del E:\Documents\backupfp1%datum%.txt
del E:\Documents\backupfp2%datum%.txt

"D:\Program Files\7-Zip\7z.exe" u E:\Documents\backup\EFP1\backupfp1%DATE%.7z E:\Documents\backup\EFP1\*.txt

"D:\Program Files\7-Zip\7z.exe" u E:\Documents\backup\EFP2\backupfp2%DATE%.7z E:\Documents\backup\EFP2\*.txt

del E:\Documents\backup\EFP1\*.txt
del E:\Documents\backup\EFP2\*.txt
Absolut geniales kleines Ding!!
 
für robocopy gibt es auch guis (eine sogar von einem Benutzer von CB) und das kann einfach mehr als das SyncToy
 
Hi,

Stichwort einfaches Ordner-BU mit Robocopy:

Ich möchte unter Win7 mehrere Wechselmedien auf eine Festplatte sichern. Weil robocopy ja ziemlich stabil laufen soll habe ich mich dafür entschieden
Das Problem ist nur, dass ich den Quellordner einfach nicht mitkopiert bekomme- der Rest wird einwandfrei kopiert nur der Quellordner wird immer übersprungen.
Gibt es da noch eine Option die ich einschalten kann? Ich steh total auf dem Schlauch... :confused_alt:

Hier mal zur Veranschaulichung die Zeile mit der ich gerade teste:

robocopy c:\Users\Kirsche\RED\RedCineX /e c:\Users\Kirsche\Desktop\test /e

Es sollte der Ordner "RedCineX" in den Ordner "test" kopiert werden.
Hat jemand von euch vielleicht ne Idee?
 
Moment, mal zum mitmeißeln, ich Langsamdenker sein :D

Du hättest gern, dass im Zielordner nochmal ein Unterordner RedCineX angelegt wird, in dem dann die entsprechenden Dateien landen?
Reicht es da nicht aus, am Zielpfad dann \RedCineX\ anzufügen!? Jetzt mal so ganz doof gefragt...
 
Ja, richtig, in den Zielordner soll der Unterordner der Quelle mitkopiert werden, hab's vielleicht auch ein bischen blöd erklärt:

Es sind mehrerere Ordner mit unterschiedlichen Namen die dann letztendlich kopiert werden müßen, "RedCineX" war nur als Beispiel gedacht mit dem ich das mal getestet habe und mit dem ich das Problem veranschaulichen wollte.
Da die Namen der Ordner aus kryptischen Zahlen und Buchstabenkombinationen bestehen würde eine manuelle Eingabe mit ziemlich hoher Wahrscheinlichkeit irgendwann zu Fehlern führen- abgesehen davon, dass es ziemlich unkomfortabel ist wenn ich das bei sovielen Ordnern machen müßte.

Ich möchte mir ein Skript schreiben, das mit einer GUI sowohl mehrere Kopiervorgänge von einer Quelle auf mehrere Ziele nacheinander abarbeiten soll (wozu ich robocopy nutzen wollte), als auch auch durch Algorithmen die Dateiintegrität berechnet und auf Fehler hinweist.

Falls robocopy nicht das Quellverzeichnis mitkopieren kann, müßte ich halt nochmal was zusätzlich skripten (:eek:), was ich eigentlich verhindern wollte.
 
Zuletzt bearbeitet:
Zurück
Oben