Die wichtigsten Befehle von robocopy: kopieren, synchronisieren, verschieben


    Tags: , , ,

    robocopyTrotz seines Namens kann robocopy nicht nur Verzeichnisse und Dateien kopieren. Wenn man die Features des mächtigen Programms jedoch ausloten will, ist man bald von den zahllosen Optionen überwältigt. Sieht man genauer hin, dann stellt sich aber heraus, dass für die häufigsten Operationen gar nicht so viele Schalter nötig sind. Hat man für bestimmten Aufgaben die wesentlichen Funktionen entdeckt, dann lässt sich robocopy schnell bei der täglichen Arbeit einsetzen.

    Die zahllosen Optionen von robocopy sowie die wegen ihrer schlechten Formatierung bedingt brauchbare Hilfe haben zur Entwicklung zahlreicher grafischer Oberflächen für das Kopier-Tool geführt. Die meisten beschränken sich darauf, die Auswahl der Parameter zu erleichtern, so dass man auf der Kommandozeile schneller ist, wenn man weiß, welche Schalter man benötigt.

    Ungewohnte Syntax

    Das Dienstprogramm von Vista, Windows Server 2008 und höher (Download für XP) geht im Unterschied von xcopy grundsätzlich davon aus, dass es auf Verzeichnisse angewendet wird. Quelle und Ziel sind daher keine Dateinamen:

    robocopy Quelle Ziel [Datei [Datei]...] [Optionen]

    Das Ausgangs- und Zielverzeichnis kann in der Form Laufwerksbuchstabe:\Pfad oder in der UNC-Notation \\server\pfad angegeben werden. Möchte man die Operation nur auf bestimmte Dateien anwenden, dann muss man diese in der Folge angeben, sei es als Liste von Namen oder mit Hilfe von Wildcards. Dieser Basisbefehl gilt für alle Operationen, die man mit robocopy ausführen möchte.

    Kopieren

    Wie der Name des Tools vermuten lässt, ist Kopieren sein Kerngeschäft. Daher führt es ohne zusätzliche Schalter genau diese Operation aus. Über eine Vielzahl von Optionen kann man die davon betroffenen Dateien filtern, sei es nach Dateiattributen, Alter, Größe oder letztem Zugriff. Eine derartige Einschränkung auf bestimmte Dateien ist normalerweise nicht erforderlich, so dass man die benötigten Schalter bei Bedarf in der Hilfe nachschlägt.

    Hingegen steht bei jedem Kopieren die Entscheidung an, welche Bestandteile der Dateien transferiert werden sollen. Standardmäßig erhält das Ziel den Inhalt, die Attribute und den Zeitstempel der Quelle. Möchten man, dass alles übernommen wird, also auch die Besitzer- und Auditing-Informationen, dann hat man dafür mehrere synonyme Befehle. Am einfachsten ist es, den Schalter /copyall zu verwenden.

    Die Minimalform des Kopierbefehls überträgt nur den Inhalt des Quellverzeichnisses in den Zielordner. Möchte man auch alle Unterverzeichnisse mitnehmen, dann braucht man dafür den Schalter /s.

    Normalerweise beginnt robocopy beim Abbruch der Kopieraktion wieder am Anfang der Datei, an der es gescheitert ist. Bei sehr großen Dateien ist es wünschenswert, dass es dort fortsetzt, wo es abgebrochen hat. Dafür verwendet man den Schalter /z.

    Backup

    robocopy bietet keinen expliziten Backup-Befehl, lässt sich aber für die einfache Datensicherung, beispielsweise von Benutzerdaten einsetzen. Der Schalter /b (Backup Mode) dient dazu, Dateien zu übertragen, an denen der normale Modus mangels Zugriffsrechten scheitert. Allerdings setzt er entsprechende Rechte voraus.

    Wesentlich für ein Backup ist der Schalter /m, weil dieser das Archiv-Bit der Quelldatei nach erfolgreichem Kopiervorgang entfernt, so dass die betreffende Datei bei der nächsten Sicherung nur berücksichtigt wird, wenn sie sich seitdem verändert hat.

    Ein zeitgesteuertes Backup lässt sich am besten erreichen, indem man den robocopy-Befehl in die Aufgabenplanung übernimmt. Die Schalter /mon:m und /mot:n sind dafür weniger geeignet. Sie veranlassen robocopy, in angegebenen Intervallen das Quellverzeichnis auf Änderungen zu überprüfen:

    robocopy c:\users\foo d:\backup\users\foo /m /mon:2 /mot:5

    sorgt dafür, dass robocopy alle 5 Minuten nachsieht, ob sich mindestens 2 Dateien verändert haben und startet bei Zutreffen dieser Bedingung den Kopierjob. Dabei läuft das Programm jedoch in einer Endlosschleife.

    Verzeichnisse synchronisieren

    Ein besonderes Feature von robocopy besteht darin, dass es zwei Verzeichnisse abgleichen kann. Allerdings bietet es dafür keine bidirektionale Replikation, sondern bringt den Zielordner immer auf den Stand des Quellverzeichnisses. Dateien, die im Ziel fehlen, werden dorthin kopiert, aber solche, die nur dort existieren und nicht an der Quelle, löscht robocopy. Daher sollte man die Funktionsweise dieser Operation genau kennen um Datenverluste zu vermeiden.

    Besonders gefährlich sind Dateien und Verzeichnisse gleichen Namens, die robocopy als mismatched einstuft. In diesem Fall löscht es das Verzeichnis am Ziel und ersetzt es durch die gleichnamige Datei aus der Quelle.

    Auch für die Synchronisierung gibt es synonyme Schalter bzw. Kombinationen. In der Regel reicht aber /mir (steht für "mirror"). Wenn man bestimmte Dateien oder Verzeichnisse vor dem Löschen schützen möchte, muss man diese mit den Schaltern /XF bzw. /XD explizit angeben.

    Wer die unerwünschten Nebenwirkungen der Synchronisierungsfunktion vermeiden möchte und nicht unbedingt eine Lösung für die Kommandozeile benötigt, sollte lieber einen Blick auf das kostenlose RoboMirror werfen.

    Verschieben

    Das Tool kann nicht nur Dateien und Verzeichnisse duplizieren, sondern im Gegensatz zu anderen Kopierbefehlen wie xcopy auch verschieben. Dafür gibt es den Schalter /move, der einen gesamten Verzeichnisbaum inklusive leerer Ordner an einen neuen Ort versetzt.

    Zu bedenken ist jedoch, dass es sich bei dieser Operation nicht um ein move auf der Ebene des Dateisystems handelt, das die Daten unberührt lässt und nur die Verzeichniseinträge verändert. Vielmehr kopiert robocopy die betroffenen Dateien und Verzeichnisse und löscht nach erfolgreichem Vorgang die Quelle. Nachdem robocopy identische Dateien in Quelle und Ziel beim Kopieren überspringt, werden diese am Ausgangsort mangels erfolgreichem Kopieren nicht entfernt.

    Wie bei allen anderen Befehlen besteht auch beim Verschieben die Möglichkeit, bestimmte Dateien einzubeziehen oder auszuschließen. Dies erfolgt entweder über die Dateiliste im Anschluss an Quell- und Zielverzeichnis oder über einen der zahlreichen Schalter zur Filterung von Dateien.

    Fazit

    Beschränkt man sich auf die wichtigsten Befehle für die Grundfunktionen von robocopy, dann verliert das Tool seinen Schrecken. Die meisten der zahlreichen Optionen braucht man nur für spezielle Anliegen und muss diese bei Bedarf in der Hilfe suchen, da man sie sich bei seltenem Gebrauch nur schwer merken kann. Wichtiger dagegen ist das Verständnis dafür, wie robocopy bestimmte Aufgaben erledigt, weil man sonst böse Überraschungen erleben kann.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links

    12 Kommentare

    Ich suche verzweifelt eine Lösung, nicht einzelne Dateien beim Kopieren auszunehmen, sondern nur bestimmte Dateien (oder Dateitypen) mit Robocopy zu kopieren. Also etwa "/pfad/*.Suffix", was aber leider nicht funktioniert. Hat jemand eine Idee?

    Das ist doch ganz einfach:

    robocopy quellordner zielordner *.ext

    Wenn Leerzeichen im Pfad vorkommen, sind Anführungszeichen zu setzen.

    Ich möchte eigentlich das gegenteil von "sirmark" machen.
    z.B.: all Dateien kopieren die nicht auf .txt enden.
    Wie kann ich dass durchführen?

    @Gandalf:

    Ganz einfach:
    robocopy QUELLE ZIEL [...] /xf *.txt

    Dies schließt Textdateien vom Kopieren aus, ich verwende es, um riesige Datenbankdateien bei täglichem Backup auszunehmen und nur am Wochenende zu kopieren.

    Einfach zusätzlich zu den sonstigen Optionen /xf *.txt setzen.

    Ich verwende Robocopy um ein backup zu erstellen, das heißt wöchentlich wird aus den Quellverzeichnissen auf Festplatte C: in die Zielverzeichnisse auf Festplatte F kopiert.

    Nun habe ich folgendes Problem:
    - Wenn nun eine Zieldatei zB F:\test.xxx schon besteht (da sie bereits bei einem früheren Backup erstellt wurde) und
    - die Datei C:\test.xxx im Quellverzeichnis verändert wurde und Robocopy sie daher kopieren möchte
    - auf die Datei aber während des Backups nicht zugegriffen werden kann, dann

    löscht Robocopy die bereits bestehende Sicherungsdatei F:\test.xxx im Zielordner.

    Meine Frage wäre nun, ob man Robocopy anweisen kann eine bestehende (ältere) Zieldatei nicht zu löschen, wenn der Kopiervorgang mißlingt.

    Ich hoffe ich habe das Problem verständlich erklärt und jemand hat eine Lösung!

    MfG

    /W:n
    Definiert die Sekunden, die gewartet wird, wenn ein Kopiervorgang nicht erfolgreich war, um es erneut zu versuchen.

    In welchem Format wird ein Robocopy-Command in der nächsten Zeile fortgesetzt?

    Servus,
    ich möchte mit Robocopy aus einem Verzeichnis z.B. d:\xyz\test.txt die Datei in mehrere Verzeichnisse auf einem Server ablegen und die Datei aus dem Verzeichniss d:\xyz\ löschen, so dass nur noch die .txt datei auf den beiden Verzeichnissen auf dem Server liegen.
    habe schon einiges versucht leider bekomme ich Fehler 5 ?

    Ich suche nach einer Lösung um viele Dateien einer bestimmten Größe (möglichst von -bis) innerhalb diverser Unterverzeichnisse zu löschen.

    Hey,

    ein bisschen OT, aber Powershell bringts:

    (Get-ChildItem -Path -recurse) | where {($_.length -ge ) -and ($_.length -le )} | Remove-Item

    Beste Grüße

    Christ

    Vielen Dank für diesen nützlichen Beitrag!
    Jetzt kann ich meine Familienbilder vom Computer auf die externe Festplatte automatisch übertragen lassen.
    Hier habe ich noch eine Liste aller Schalter gefunden:
    https://www.itnator.net/robocopy-parameter-backup-erstellen-mir/

    Gruß Hubert