Robocopy-Befehle: Datenmigration, Ordnersynchronisation und mehr

Robocopy ist eines der meistgenutzten Befehlszeilenprogramme zum Kopieren großer Datenmengen in Windows. Es ist ein beliebtes Werkzeug aufgrund seiner Leistungsfähigkeit. Aber mit all dieser Leistung kommt auch Komplexität. In dieser Anleitung werden wir diese Komplexität aufschlüsseln und ein vollständiges Tutorial zur Verwendung dieses nützlichen Tools bereitstellen.

Robocopy ist ein Windows-Befehlszeilenprogramm, das seit Windows NT verfügbar ist. Es ist ein Ersatz für das weniger vielseitige xcopy-Programm. Es ermöglicht Ihnen, einen Laufwerks- oder Serverpfad anzugeben, um Dateien über die Eingabeaufforderung zu kopieren/verschieben.

Die Version von Robocopy zum Zeitpunkt dieses Schreibens ist 10.0.18. Dies ist die Version, auf der ich meine Tests durchgeführt habe.

Robocopy bietet eine Vielzahl von Funktionen, die Sie nutzen können, um effiziente und schnelle Dateikopien und -verschiebungen durchzuführen. Es kann:

  • Dateien über ein Netzwerk mit Fortsetzungsfunktionen kopieren
  • NTFS-Verknüpfungspunkte überspringen, die normalerweise zu Fehlern aufgrund von Endlosschleifen führen
  • Datei- und Verzeichnisattribute kopieren und Zeitstempel erhalten
  • NTFS-Berechtigungen, Besitzer und Überwachungsinformationen kopieren
  • Verzeichniszeitstempel kopieren
  • Dateien im „Backup“-Modus kopieren, um sicherzustellen, dass Dateien kopiert werden, selbst wenn dem Administrator die Rechte verweigert wurden
  • Automatische Wiederholungsversuche
  • Zwei Ordner synchronisieren
  • Erfasst bereits kopierte Dateien
  • Pfade kopieren, die länger als das 256-Zeichen-Limit sind
  • Asynchrone Kopien mit Multithreading-Fähigkeit durchführen.
  • Liefert standardisierte Exit-Codes für die Verwendung in Skripten.

Wie Sie sehen können, gibt es viel zu kopieren. Ich wollte alles abdecken, was Sie über dieses praktische Werkzeug wissen müssen.

Allgemeine Robocopy-Syntaxreferenz

Warum ein so langer Blogbeitrag über ein einziges Dienstprogramm? Schauen Sie sich einfach die unten stehenden Tabellen an. Sie haben viele Optionen zum Kopieren oder Verschieben von Dateien mit Robocopy! Weitere Optionen finden Sie in den einzelnen Abschnitten.

Diese Tabellen wurden aus der Hilfe-Syntax erstellt, die von robocopy /? zurückgegeben wurde. Sie wurden in sinnvollere Abschnitte unterteilt, im Laufe der Zeit ergänzt und aufbereitet, um nützlichere Informationen bereitzustellen.

Quelloptionen

Switch Explanation Default Behavior Equivalent Switch Notes
/S Copy subfolders
/E Copy subfolders including empty subfolders
/COPY:[DATSOU] Copy options /COPY:DAT D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T)
/SEC Copy files with SECurity /COPY:DATS
/DCOPY:T Copy directory timestamps
/COPYALL Copy ALL file info /COPY:DATSOU This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit)
/NOCOPY Copy NO file info useful with /PURGE
/A Copy only files with the Archive attribute set
/M like /A, but remove Archive attribute from source files
/LEV:n Only copy the top n LEVels of the source tree
/MAXAGE:n MAXimum file AGE – exclude files older than n days/date
/MINAGE:n MINimum file AGE – exclude files newer than n days/date If n < 1900 then n = no of days, else n = YYYYMMDD date
/FFT Assume FAT File Times 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network.
/256 Turn off very long path (> 256 characters) support

Zieloptionen

Switch Explanation Default Behavior Equivalent Switch Notes
/A+:[RASHCNET] Set file attribute(s) on destination files + add
/A-:[RASHCNET] Remove file attribute(s) on destination files
/FAT Create destination files using 8.3 FAT file names only
/CREATE Create directory tree structure + zero-length files only
/DST Compensate for one-hour DST time differences

Kopieroptionen

Switch Explanation Default Behavior Equivalent Switch Notes
/L List files only Don’t copy, timestamp or delete any files
/MOV Move files Delete from source after copying
/MOVE Move files and directories Delete from source after copying
/sl Copy file symbolic links instead of the target
/Z Copy files in restartable mode Survive a network glitch
/B Copy files in backup mode
/J Copy using unbuffered I/O Recommended for large files
/NOOFFLOAD Copy files without using the Windows copy offload mechanism https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11)
/EFSRAW Copy any encrypted files using EFS RAW mode
/TIMFIX Fix file times on all files, even skipped files
/XO Exclude older if destination file exists and is the same date or newer than the source – don’t bother to overwrite it.
/XC Exclude changed files
/XN Exclude newer files
/XX Exclude files present in destination but not source /XX
/XF file [file]… Exclude files matching given names/paths/wildcards
/XD dirs [dirs]… Exclude directories matching given names/paths. /XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S
/IA:[RASHCNETO] Include files with any of the given attributes
/XA:[RASHCNETO] Exclude files with any of the given attributes
/IM Overwrite modified files. This includes the same files with different times.
/IS Overwrite files even if they are already the same
/IT Include tweaked files
/XJ Exclude junction points from source /XJ
/XJD Exclude junction points from source directories
/XJF Exclude junction points from source files
/MAX:n Exclude files bigger than n bytes
/MIN:n Exclude files smaller than n bytes
/MAXLAD:n Exclude files unused since n
/MINLAD:n Exclude files used since n If n < 1900 then n = n days, else n = YYYYMMDD date
/MIR Mirror a directory tree /PURGE /E
/PURGE Delete dest files/folders that no longer exist in source
/XL Exclude files present in source but not destination
/SECFIX Robocopy /secfix fixes file security on all files, even skipped files. Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC
/ZB Use restartable mode; if access denied use Backup mode

Überwachungsoptionen

Switch Explanation Default Behavior Equivalent Switch Notes
/R:n Number of retries on failed copies /R:1000000 Always try to set this option. I recommend setting this to 10-20 to not waste time retrying.
/W:n Wait time between retries /W:30 Always try to set this option to a lower number to retry more quickly. I suggest 5-10.
/REG Save /R:n and /W:n in the Windows registry as default settings
/RH:hhmm-hhmm times when new copies can be started
/TBD Wait for sharenames to be defined retry error 67
/PF Check run hours on a per file (not per pass) basis
/MON:n Run again when more than n changes seen
/MOT:m Run again in m minutes, if changed

Verständnis des Verhaltens von Robocopy

I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.

I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.

Robocopy kopiert nur ganze Verzeichnisse

Jeder Robocopy-Ausführung hat ein Quell- und ein Zielverzeichnis. Robocopy kopiert und verschiebt Dateien nach ganzen Verzeichnissen. Es ist nicht möglich, eine einzelne Datei explizit mit Robocopy zu kopieren. Verwenden Sie dafür copy oder PowerShell’s Copy-Item.

Sie können jedoch mit der richtigen Filterung eine einzelne Datei mit Robocopy kopieren, wie Sie unten erfahren werden. Um eine einzelne Datei mit Robocopy zu kopieren, geben Sie unmittelbar nach dem Dateinamen im Quellverzeichnis die Quell- und Zielverzeichnisse an.

> robocopy c:\src d:\dst copythisfile.txt

Die Syntax hängt von der Umgebung ab

Darüber hinaus hängen die Optionen, die Sie Robocopy bereitstellen, von der Umgebung ab. Sie müssen einige Fragen beantworten, um herauszufinden, welche Optionen Sie verwenden sollten.

  • Werden Sie immer in ein leeres Verzeichnis kopieren?
  • Ist es möglich, dass bereits Dateien im Zielverzeichnis vorhanden sind?
  • Werden Sie Terabyte an Daten kopieren oder nur ein paar Megabyte?
  • Werden Dateien über ein Netzwerk oder lokal kopiert?
  • …und mehr.

Wenn es keine Dateien im Zielverzeichnis gibt, müssen Sie sich keine Gedanken über Optionen machen, die Dateien überschreiben. Wenn Sie Dateien nicht über das Netzwerk kopieren werden, brauchen Sie sich keine Sorgen um diese Optionen zu machen. Beschreiben Sie explizit Ihre aktuellen und potenziellen zukünftigen Umstände, in denen sich Ihre Umgebung befinden wird.

Erkennen Sie die Standardoptionen

Robocopy verwendet standardmäßig viele Optionen. Sie können sie aus den obenstehenden Tabellen entnehmen. Es bietet auch eine praktische Ausgabe jedes Mal, wenn Sie das Dienstprogramm ausführen.

Wie Sie unten sehen können, wenn ich robocopy mit seinen grundlegendsten Optionen (Quell- und Zielordner) ausgeführt habe, hat es automatisch einige Optionen verwendet. Das Verständnis des Standardverhaltens ist wichtig.

Beziehen Sie sich auf die Optionen, die Sie in der Ausgabe sehen, und Sie werden genau verstehen, was robocopy im Hintergrund tut.

Default robocopy options

Verständnis, was Robocopy-Befehle tun können

Wenn Sie die Befehle copy oder PowerShell’s Copy-Item verwendet haben, haben Sie wahrscheinlich eine Quelle und ein Ziel angegeben und sind dann weitergegangen. Hier gibt es nicht viele Optionen, die Sie konfigurieren können. Diese robocopy-Befehle haben ein Standardverhalten.

Aber robocopy hingegen versteht viel mehr und gibt Ihnen die Flexibilität, das Verhalten so weit wie möglich anzupassen.

Es ist wichtig zu wissen, dass Robocopy nicht nur das Konzept einer Datei oder eines Verzeichnisses kennt. Es gibt noch viel mehr in einem Dateisystem als das, und Robocopy unterstützt praktisch alles.

A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:

  • a timestamp (written, modified and accessed)
  • NTFS ACL
  • ein Besitzer
  • NTFS-Überwachungsinformationen
  • versteckte Markierung
  • archivierte Markierung

Wenn Sie eine Datei kopieren oder verschieben, haben Sie die Möglichkeit, all diese Informationen mitzunehmen, wenn Sie möchten.

Beachten Sie, dass Sie, wenn Sie Robocopy ausführen, nicht nur eine Datei kopieren, sondern auch potenziell alle anderen Informationen damit kopieren. Es ist wichtig, das zu erkennen und bei den Optionen, die Sie Robocopy geben, zu berücksichtigen.

Die Grundlagen: Durchführung von „Was wäre wenn“-Szenarien

Wenn Sie einen riesigen Dateiserver migrieren möchten und noch keine Maßnahmen ergreifen möchten, können Sie Robocopy verwenden, um zurückzugeben, was es getan hätte.

Mit der Option /L können Sie Robocopy anweisen, alle von Ihnen angegebenen Dateien und/oder Ordner aufzulisten und eine Liste der Dateien zurückzugeben, die es kopiert/verschoben hätte.

Sie können die Option /L mit jeder anderen Option verwenden. Dies ist eine großartige Möglichkeit, alle Optionen zurückzugeben, die Robocopy verwendet hätte (Standard oder nicht). Es gibt Ihnen einen Gesamtüberblick darüber, was Robocopy basierend auf den von Ihnen bereitgestellten Optionen tun wird.

Using /L

Die Grundlagen: Kopieren von Dateien

Die einfachste Verwendung von Robocopy besteht darin, ein Quell- und ein Zielverzeichnis ohne Optionen zu verwenden.

> robocopy C:\src C:\dst

Diese Option kopiert alle Dateien (ohne Unterordner) von C:\src nach C:\dst.

Sie können auch alles einschließlich Unterordner (leer oder nicht) und NTFS-Berechtigungen kopieren. Das ist meiner Meinung nach die Methode, um buchstäblich alles, was es über ein Verzeichnis von Dateien gibt, in ein anderes Verzeichnis zu kopieren.

Im Folgenden kopiere ich alle NTFS-Zugriffssteuerungslisten, Dateibesitzer, Unterordner (einschließlich leerer) und alle Dateiattribute. All dies wird mit der Option /E zum Einbeziehen aller leeren Unterordner und /COPYALL zum Erfassen des Rests ermöglicht.

> robocopy C:\src C:\dst /E /COPYALL

Die Grundlagen: Verschieben von Dateien

Mit dem Verschieben von Dateien werden Dateien von einem Verzeichnis in ein anderes übertragen, genau wie beim Kopieren. Der einzige Unterschied bei einer Verschiebungsoperation besteht darin, dass die Quelldateien nach dem Kopieren entfernt werden.

Verwenden Sie die Option /MOV, um Dateien/Verzeichnisse nach dem Kopieren aus der Quelle zu löschen. Dadurch werden alle Dateien im angegebenen Verzeichnis (keine Unterordner) entfernt.

> robocopy C:\src C:\dst /MOV

Sie können auch /MOVE verwenden, um alle Dateien und Unterordner zu verschieben.

> robocopy C:\src C:\dst /MOVE

Die Grundlagen: Synchronisieren von Dateien

Mit Robocopy können Sie zwei Verzeichnisse synchronisieren. Das bedeutet entweder sicherzustellen, dass alle Dateien im Zielverzeichnis im Quellverzeichnis vorhanden sind und nicht mehr. /MIR repliziert Daten, indem alle Dateien im Quellverzeichnis, die nicht im Zielverzeichnis vorhanden sind, kopiert werden, und löscht Dateien im Zielverzeichnis, die nicht im Quellverzeichnis vorhanden sind. Vorsicht!

> robocopy C:\src C:\dst /MIR

Dateien über ein Netzwerk kopieren

Wenn Sie Dateien über ein Netzwerk kopieren, gibt es einige Optionen, die Sie berücksichtigen sollten.

Robocopy ermöglicht das Kopieren von Dateien im „Neustartmodus“ mit der Option /Z. Dies bedeutet, dass der Kopiervorgang bei einem Abbruch in der Mitte wieder gestartet werden kann, anstatt komplett zu scheitern. Die Option /Z ist nützlich, wenn die Verbindung über ein Netzwerk unterbrochen wird.

Warnung: Einige haben berichtet, dass die Verwendung von /Z die Leistung um ein Viertel reduziert. Teilen Sie mir Ihre Ergebnisse mit.

Sie können auch die Option /FFT verwenden. Dieser Schalter soll die Dateizeitstempel beim Übertragen über ein Netzwerk genauer erhalten. Diese Option verwendet FAT-Dateisystem-Zeitstempel anstelle von NTFS.

robocopy C:\src \\SRV1\share /Z /FFT

Mit /IPG die Inter-Paket-Lücke steuern

Beim Kopieren von Dateien über ein Netzwerk können Sie den Schalter /IPG verwenden. Dies wird auch als Inter-Paket-Lückenoption bezeichnet. Diese Option definiert (in Millisekunden) die Frequenz, mit der Robocopy zwischen dem Senden neuer Pakete wartet.

Verwenden Sie immer UNC-Pfade anstelle von Laufwerksbuchstaben

A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.

Robocopy-Backup-Modus (Robocopy /Z)

Robocopy verfügt über eine Option (/B) oder eine Backup-Version des Neustartmodus (/ZB), mit der Dateien im Backup-Modus kopiert werden. Was ist eigentlich der „Backup-Modus“?

Wenn Sie normalerweise eine Datei in Windows kopieren und auf eine Datei stoßen, für die Administratorrechte erforderlich sind, erhalten Sie einen Fehler, der anzeigt, dass Sie keine Berechtigung haben. Auch wenn Sie als lokaler Administrator angemeldet sind, lässt Sie Windows nicht darauf zugreifen.

WARNUNG: Es gibt Berichte über beschädigte Servervolumes, wenn Daten auf einen Windows Server 2016 mit aktivierter Deduplizierung kopiert werden. Wenn Sie den Schalter /ZB verwenden, wird der Deduplizierungs-Chunkspeicher im Ordner „System Volume Information“ beschädigt. Die kopierten Dateien sind nicht lesbar und es treten Fehler auf, wenn Sie versuchen, sie zu bearbeiten. Hier finden Sie weitere Informationen auf Serverfault.

Der Sicherungsmodus ist eine Möglichkeit, auf Dateien zuzugreifen, ohne sich um Berechtigungen sorgen zu müssen.

Robocopy verwendet den Sicherungsmodus, um das SeBackupPrivilege zum Lesen von Dateien und das Benutzerrecht SeRestorePrivilege zum Zugriff auf benötigte Dateien zu verwenden. Dadurch werden alle ACEs ignoriert, die normalerweise den Zugriff auf diese Dateien verhindern würden.

Die Benutzerrechte SeBackupPrivilege und SeRestorePrivilege werden normalerweise Benutzern in den Gruppen Backup-Operatoren und Administratoren zugewiesen, können jedoch manchmal entfernt werden. Der Sicherungsmodus beseitigt dieses Risiko und gewährt dem Benutzer, der Robocopy ausführt, vorübergehend diese Rechte.

Wenn Sie überprüfen möchten, ob Ihr Benutzerkonto dieses Recht hat, können Sie den Befehl whoami /priv ausführen, und beide Rechte sollten angezeigt werden.

Filtern von Dateien und Ordnern

Die große Mehrheit der verfügbaren Optionen dient dazu, Dateien und Verzeichnisse auf verschiedene Weise auszuschließen. Ich habe alle Möglichkeiten aufgelistet, wie Sie Dateien und Verzeichnisse anhand verschiedener Kriterien filtern oder ausschließen können.

Nach Dateinamen oder Dateierweiterung

Das Filtern von Dateien, die in einem Robocopy-Aufruf kopiert/verschoben werden sollen, erfolgt mit Hilfe von Platzhaltern. Sie können einen Platzhalter verwenden, um Dateien mit einem bestimmten Dateinamen oder einer bestimmten Dateierweiterung zu filtern.

Zum Beispiel können Sie mit *.txt nur TXT-Dateien kopieren.

> robocopy C:\src C:\dst *.txt

Wenn Sie nur Dateien kopieren möchten, die mit einem bestimmten Buchstaben beginnen, können Sie a* verwenden.

> robocopy C:\src C:\dst a*

Sie können auch mehrere Dateinamensätze angeben, indem Sie sie mit einem Leerzeichen trennen, wie unten gezeigt.

> robocopy C:\src C:\dst a* b*

Wenn Sie nach Dateinamen filtern, zeigt Ihnen Robocopy den Filter im Ausgabebereich an.

FIltering files output

Nach Verzeichnisnamen

Mit Robocopy können Sie nicht nur nach Dateien, sondern auch nach Verzeichnisnamen filtern. Mit dem Befehl robocopy /xd können Sie bestimmte Verzeichnisse ausschließen, die einem bestimmten Namen entsprechen.

Wenn Sie mehrere Ordner kopieren, verwenden Sie den Schalter /XD, um Ordner vom Vorgang auszuschließen.

> robocopy C:\src C:\dst /XD "c:\src\exclude"

Nach Datei-/Verzeichnis-Zeitstempel

Unten finden Sie alle Robocopy-Optionen, die Dateien und Verzeichnisse basierend auf verschiedenen Zeitstempelattributen ausschließen.

Switch Explanation
/DCOPY:T Copy directory timestamps
/MAXAGE:n Exclude files older than n days/date
/MINAGE:n Exclude files newer than n days/date
/XO If destination file exists and is the same date or newer than the source, don’t overwrite
/XN If destination file exists and is the same date or older than the source, don’t overwrite

Es gibt zwei beliebte Optionen, wenn es um das Filtern von Zeitstempeln geht: /XO und /MAXAGE.

Mit /XO können Sie Dateien vom Kopieren ausschließen, wenn sie neuer als die Quelldateien sind. Mit der Option /XO können Sie Robocopy nur neue Dateien nach Zugriffsdatum kopieren.

> robocopy C:\src C:\dsc /XO

Wenn Sie das maximale Alter von Dateien kennen, können Sie auch die Option /MAXAGE verwenden. Dadurch können Sie im Format YYYMMDD das älteste Datum angeben, das eine Datei haben kann, bevor sie kopiert wird.

> robocopy c:\src c:\dst /S /MAXAGE:20191001

Robocopy-Jobs

Sie haben gesehen, dass Ihnen dutzende Optionen zur Verfügung stehen. Es ist leicht, dass diese Optionen unhandlich werden. Glücklicherweise haben Sie eine bessere Möglichkeit, als sich alle diese Optionen jedes Mal auswendig zu merken und sicherzustellen, dass sie stimmen.

Robocopy-Jobdateien sind Textdateien, die eine Option pro Zeile enthalten. Normalerweise verwenden Sie Robocopy, um diese Jobdateien zu erstellen. Sobald sie erstellt sind, können Sie entweder Robocopy verwenden, um sie zu ändern, oder einen einfachen Texteditor.

Sie haben verschiedene Robocopy-Befehle, die mit Jobs funktionieren.

Switch Explanation Default Behavior Equivalent Switch Notes
/JOB:jobname Take parameters from the named job file
/SAVE:jobname Save parameters to the named job file
/QUIT Quit after processing command line Useful for viewing parameters
/NOSD No source directory is specified
/NODD No destination directory is specified
/IF Include the following files

A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:\src D:\dst /save:myjob. You can see that you can provide comments in the job file using :: which is most of what this file has.

Ohne Kommentare würde die Datei nur eine Option pro Zeile enthalten.

::
:: Robocopy Job C:\MYJOB.RCJ
::
:: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM
::

::
:: Source Directory :
::
        /SD:C:\SRC\     :: Source Directory.

::
:: Destination Directory :
::
        /DD:C:\SRC\     :: Destination Directory.

::
:: Include These Files :
::
        /IF             :: Include Files matching these names
::              *.*     :: Include all names (currently - Command Line may override)

::
:: Exclude These Directories :
::
        /XD             :: eXclude Directories matching these names
::                      :: eXclude no names (currently - Command Line may override)

::
:: Exclude These Files :
::
        /XF             :: eXclude Files matching these names
::                      :: eXclude no names (currently - Command Line may override)
::
:: Copy options :
::
        /DCOPY:DA       :: what to COPY for directories (default is /DCOPY:DA).
        /COPY:DAT       :: what to COPY for files (default is /COPY:DAT).
::
:: Retry Options :
::
        /R:1000000      :: number of Retries on failed copies: default 1 million.
        /W:30           :: Wait time between retries: default is 30 seconds.
::
:: Logging Options :
::

Speichern von Jobdateien

Das Speichern einer Jobdatei ist so einfach wie das Anhängen der Option /SAVE:<jobname> an das Ende Ihrer Syntax. Ersetzen Sie <jobname> durch den Namen des Jobs. Die Option /SAVE erstellt eine Datei mit dem Namen <jobname>.rcj im Verzeichnis, in dem Sie Robocopy ausgeführt haben.

> robocopy C:\src C:\dst /SAVE:myjob

Sie müssen /SAVE als letzte Option angeben. Alle nach /SAVE angegebenen Optionen werden nicht zur Jobdatei hinzugefügt. Beachten Sie auch, dass Robocopy selbst dann, wenn bereits eine vorhandene Jobdatei existiert, diese immer überschreibt. Sichern oder versionieren Sie Ihre Jobdateien!

Hinweis: Wenn Sie versuchen, die Option /MT beim Speichern in einer Jobdatei zu verwenden, wird sie nicht in der Jobdatei enthalten sein. Lassen Sie mich wissen, ob es Ihnen gelungen ist, dies einzuschließen.

Verwendung von Jobdateien

Sobald ein Job in einer Jobdatei gespeichert ist, können Sie die Option /JOB:<jobname> verwenden, um die auszulesende Jobdatei anzugeben. Robocopy liest alle Parameter in der Jobdatei und führt sie dann genauso aus, als hätten Sie die Optionen direkt in der Befehlszeile angegeben.

> robocopy /JOB:myjob

Erstellen einer Jobdatei ohne Ausführung eines Jobs mit /QUIT

Der Zweck der Option /QUIT ist nicht offensichtlich. Auf den ersten Blick könnten Sie denken, dass /QUIT das Beenden eines laufenden Jobs erzwingt. Stattdessen fungiert /QUIT eher als Option, um zu verhindern, dass ein Job überhaupt ausgeführt wird.

Offiziell „zwingt die Option /QUIT Robocopy dazu, die Bearbeitung der Befehlszeile zu beenden“. Es wäre jedoch besser erklärt, dass damit eine Jobdatei erstellt wird, ohne dass ein Job ausgeführt wird.

Wenn Sie die Option /SAVE verwenden, wird der Job auch automatisch ausgeführt. Es gibt keine Möglichkeit, eine Jobdatei zu erstellen, ohne den Job zuvor auszuführen. Sie könnten die RCJ-Jobdatei mit einem Texteditor erstellen oder Robocopy verwenden, indem Sie /QUIT am Ende anhängen.

> robocopy C:\src C:\dst /SAVE:myjob /QUIT

Bearbeiten einer Jobdatei

Da Jobdateien nur Textdateien sind, können Sie sie mit Ihrem bevorzugten Texteditor bearbeiten oder Sie können Robocopy dies für Sie tun lassen.

Sie können Jobdateien mithilfe einer Kombination von /JOB, /SAVE und /QUIT bearbeiten.

Zum Beispiel möchten Sie möglicherweise alle EXE-Dateien von Ihrem Robocopy-Job ausschließen, der in einer Jobdatei namens backupfiles.rcj gespeichert ist. Sie haben die Jobdatei bereits erstellt und möchten nicht das gesamte Ding überschreiben. Sie können die neue Option wie folgt hinzufügen:

> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT

Verwendung mehrerer Jobdateien

Sie können sogar die Verwendung von Jobdateien kombinieren. Wenn Sie mehrere Jobdateien in einem einzigen Durchlauf angeben, werden alle in diesem Durchlauf verwendeten Optionen miteinander kombiniert.

Zum Beispiel haben Sie möglicherweise eine große Liste von Dateien, die von Ihrem backupfiles-Kopierjob ausgeschlossen werden sollen. Öffnen Sie einen Texteditor und fügen Sie Folgendes hinzu, um eine exclude.rcj-Datei zu erstellen.

/XF
    a.exe
    b.txt
    c.cer

Sie können dann diese Dateien von dem backupfiles-Job ausschließen, wie folgt:

> robocopy /JOB:backupfiles /JOB:exclude

Da die ursprüngliche backupfiles-Jobdatei bereits alle EXE-Dateien ausschließt, sieht die obige Syntax des Durchlaufs so aus: /XF *.exe a.exe b.txt c.cer. Robocopy kombiniert alle Optionen zu einer einzigen.

Robocopy-Vorlagen und Verwendung der Optionen /NOSD und /NODD

Wenn Sie mit vielen Jobdateien arbeiten, können Sie Jobdateien erstellen, um Parameter anzunehmen. Robocopy ermöglicht es Ihnen, Werte von der Befehlszeile an Jobs zu übergeben, wenn sie ausgeführt werden. Ein Parameter ist kein robocopy-Begriff, passt aber gut in dieses Szenario.

Sie können Robocopy-Jobs erstellen, um Parameter anzunehmen, indem Sie weder ein Quell- noch ein Zielverzeichnis explizit angeben und entweder die Optionen /NOSD und /NODD verwenden oder überhaupt kein Quell- und Zielverzeichnis angeben.

Zum Beispiel können Sie eine Jobdatei ohne Quell- oder Zielverzeichnis mit der folgenden Syntax erstellen. Das Ziel dieses Jobs ist es, alle TXT- und EXE-Dateien von einem Quellverzeichnis in ein Zielverzeichnis zu kopieren.

> robocopy *.txt *.exe /SAVE:backupfiles /QUIT

Dieser Job funktioniert von selbst nicht, da kein Quell- oder Zielverzeichnis angegeben ist.

Wenn Sie einen Job ohne Quell- und Zielverzeichnis erstellen, wird die Jobdatei automatisch mit den Optionen /NOSD und /NODD erstellt.

/NOSD           
/NODD
/IF
    *.txt
    *.exe
/DCOPY:DA
/COPY:DAT
/R:1000000
/W:30

Die Option /NOSD teilt robocopy mit, dass Sie kein Quellverzeichnis angegeben haben, während /NODD darauf hinweist, dass Sie kein Zielverzeichnis angegeben haben. Diese Jobdatei dient als „Vorlage“ für andere Jobs.

Sie können jedoch „Parameter“ an diese Jobdatei übergeben, um die Quell- und Zielverzeichnisse anzugeben.

Um die gerade erstellte Jobdatei zum Kopieren von Dateien von C:\src nach C:\dst zu verwenden, können Sie diese Verzeichnisse direkt in der Befehlszeile übergeben, die dann an den Job übergeben werden.

> robocopy /JOB:backupfiles C:\src C:\dst

Asynchrones Kopieren (Robocopy /MT)

Standardmäßig verarbeitet robocopy nur eine Datei gleichzeitig. Sie können jedoch robocopy dazu zwingen, mehrere Dateien gleichzeitig zu kopieren, indem Sie die Option /MT verwenden.

Die Option /MT ermöglicht es Ihnen, die Anzahl der Threads festzulegen, die robocopy zum Kopieren von Dateien verwendet. Das Maximum beträgt 128.

Sie können /MT wie folgt verwenden:

> robocopy C:\src C:\dst /MT:32

I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.

Beachten Sie, dass Sie bei Verwendung von /MT nicht /IPG oder /EFSRAW verwenden können. Für eine bessere Leistung geben Sie das Protokoll nicht auf der Konsole aus. Verwenden Sie stattdessen /LOG.

Planung von Robocopy

Robocopy bietet verschiedene Möglichkeiten, um festzulegen, wann es ausgeführt wird.

Mit /RH

Mit der Option /RH können Sie Robocopy anweisen, nur zu einer bestimmten Zeit auszuführen. Dies ist großartig, wenn Sie ein Wartungsfenster oder eine Zeit haben, wenn alle nach Hause gegangen sind.

Sie können eine Startzeit und eine Endzeit im Format HHMM-HHMM angeben. Um beispielsweise Robocopy aufzurufen, aber es nur zwischen 17:00 Uhr und 09:00 Uhr gemäß der Systemuhr ausführen zu lassen, verwenden Sie folgenden Befehl:

> robocopy C:\src C:\dst /RH:1700-0900

Sie werden feststellen, dass Robocopy Sie benachrichtigt und auf die Startzeit wartet, wenn Sie es außerhalb dieser Stunden aufrufen.

Robocopy tells you what time it will start if scheduled

Sie müssen sicherstellen, dass beide Zeiten im 24-Stunden-Format vorliegen und genau vier Stellen lang sind. Das Zeitfenster muss größer als zwei Minuten sein.

Standardmäßig überprüft Robocopy mit /RH die Startzeit vor dem gesamten Vorgang. Wenn Sie jedoch viele Dateien haben und der Vorgang länger dauern könnte, können Sie die Option /PF verwenden. /PF zwingt Robocopy dazu, das Zeitfenster vor jeder Datei zu überprüfen.

Verwendung des Taskplaners

Das Ausgabeprotokoll

Robocopy gibt immer ein Ausgabeprotokoll zurück. Ob dieses Protokoll über stdout in der Konsole angezeigt und/oder in eine Protokolldatei umgeleitet wird, liegt bei Ihnen.

Sie haben viele Optionen, um die Ausgabe von Robocopy anzuzeigen.

Switch Explanation Default Behavior Equivalent Switch Notes
/NP No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file.
/unicode Display the status output as unicode text
/LOG:file Output status to log file and overwrite
/UNILOG:file Output status to unicode log file and overwrite
/LOG+:file Output status to log file and append to existing log file
/UNILOG+:file Output status to unicode log file and append to existing log file
/TS Displays the file timestamps for every file processed.
/FP Replaces simple file names with full file pathnames in the output.
/NS Does not show file sizes.
/NC Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/)
/NFL Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged
/NDL Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files.
/TEE Output to console window, as well as the log file
/NJH No job header
/NJS No job summary
/BYTES Print sizes as bytes
/X Report all files, not just those selected & copied
/V Produce verbose output log, showing skipped files
/ETA Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish).
/DEBUG Show debug volume information

Begrenzung der Protokollelemente mit /NJS und /NJH

Standardmäßig gibt Robocopy zwei Elemente in seiner Ausgabe zurück: eine Jobüberschrift und eine Zusammenfassung des Jobs.

Die Jobüberschrift ist die einfache Kopfzeile ROBOCOPY am Anfang.

Robocopy job header

Die Jobübersicht zeigt den Zusammenfassungsstatus aller Dateien/Ordner, wie viele Daten übertragen wurden und die Zeit, zu der der Vorgang beendet wurde.

Robocopy job summary

Sie können jedes dieser Elemente ausblenden, indem Sie die Option /NJH verwenden, um den Jobheader auszublenden, und die Option /NJS, um die Jobübersicht auszublenden. Sie können entweder eine oder beide dieser Optionen verwenden.

Hiding the job header and job summary

Weiterleitung des Ausgabeprotokolls in eine Datei

Wenn Sie das Ausgabeprotokoll speichern möchten, können Sie es in eine Textdatei umleiten und/oder auf der Konsole anzeigen lassen. Sie können dies mit herkömmlichen Ausgabeweiterleitungen wie >, >>, PowerShell oder der Option /LOG tun.

Um das Ausgabeprotokoll mit der Option /LOG in eine Datei umzuleiten und dabei vorhandene Protokolldateien zu überschreiben, verwenden Sie die Syntax /LOG:<Dateipfad> wie unten angegeben. Die einzige Ausgabe, die Sie auf der Konsole erhalten, ist der Pfad zur Protokolldatei.

> robocopy C:\src C:\dst /LOG:c:\file.log

 Log File : c:\file.log

Wenn Sie den Inhalt einer vorhandenen Protokolldatei beibehalten und Ergebnisse an eine Datei anhängen möchten, können Sie den Operator + verwenden, wie unten gezeigt.

> robocopy C:\src C:\dst /LOG+:c:\file.log

 Log File : c:\file.log

Weiterleitung des Ausgabeprotokolls in eine Datei und Anzeigen auf der Konsole

Wenn Sie das Ausgabeprotokoll in eine Datei speichern und gleichzeitig auf der Konsole anzeigen möchten, können Sie die Option /TEE verwenden. Diese Option bewirkt, dass robocopy die Ausgabe in die Protokolldatei schreibt und gleichzeitig das Standardverhalten beibehält, Ausgabe auf der Konsole zurückzugeben.

robocopy C:\src C:\dst /LOG+:c:\file.log /TEE

Ausstiegscodes

Wie alle anderen Befehlszeilen-Dienstprogramme gibt robocopy je nach Ergebnis der Ausführung Ausstiegscodes zurück. Wir alle wünschen uns, dass robocopy immer erfolgreich mit einem 0 beendet wird, aber das passiert nicht immer.

Nachfolgend finden Sie alle Ausgabecodes, die von Robocopy zurückgegeben werden, und ihre Erklärung. Jeder Ausgabecode größer als sieben gibt an, dass während der Ausführung mindestens ein Fehler aufgetreten ist.

Exit Code Explanation
0 No action performed. Source and destination are synchronized.
1 At least one file was copied successfully.
2 Extra files or directories were detected. Examine log.
3 Exit codes 2 and 1 combined.
4 Mismatched files or directories found. Examine log.
5 Exit codes 4 and 1 combined.
6 Exit codes 4 and 2 combined.
7 Exit codes 4, 1 and 2 combined.
8 At least one file or directory could not be copied. Retry limit exceeeded. Examine log.
16 Copy failed catastrophically.

Beachten Sie, dass eine Drittanbieter-Dienstprogramm, das Robocopy ausführt, jeden Nicht-Null-Ausgabecode als Fehler betrachten kann. Um dies zu verhindern, können Sie den Ausgabecode auf 0 ändern, wenn er 1 zurückgibt.

Der Robocopy-„extra“ Dateiausgabecode ist ein häufiger Rückgabecode, der bedeutet, dass eine „extra“ Datei im Zielordner vorhanden ist, jedoch nicht im Quellordner. Dieser Code schließt Extras aus, die Löschungen im Zielort verhindern würden.

Ändern des Ausgabecodes in einer Stapeldatei

Wenn Sie Robocopy mit einer Stapeldatei ausführen, können Sie den Wert der Variablen %ERRORLEVEL% abrufen. Wenn er 1 zurückgibt, verwenden Sie das Schlüsselwort exit, um das Skript mit 0 zu beenden.

> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0

Ändern des Ausgabecodes in einem PowerShell-Skript

Wenn Sie Robocopy in einem PowerShell-Skript ausführen, können Sie Robocopy mit Start-Process aufrufen und PassThru verwenden, um den erstellten Prozess zurückzugeben, sowie Wait, um auf das Ende von Robocopy zu warten. Sie können dann die Eigenschaft ExitCode auf einen Wert von 1 überprüfen. Wenn der Ausgabecode 1 ist, beenden Sie das PowerShell-Skript mit 0, indem Sie $host.SetShouldExit() verwenden.

$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCode
if ($exitCode -eq 1) {
    $host.SetShouldExit(0)
}

Gemeinsame Fehler

Wenn Sie Tausende von Dateien verarbeiten, werden Sie mit einigen Problemen konfrontiert sein. Hier ist eine Aufschlüsselung häufiger Fehler, auf die ich gestoßen bin

Fehler Ungültiger Parameter

Wenn Sie einen Fehler mit der Meldung „Fehler: Ungültiger Parameter“ sehen, bedeutet dies normalerweise, dass Sie versucht haben, Optionen an robocopy in irgendeiner Weise außerhalb der Reihenfolge zu übergeben. Der robocopy ungültiger Parameter 3-Fehler ist der häufigste Fehler, scheint es.

A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.

Robocopy-Beispiele

Sie können Ihre eigenen Zeichenfolgen von robocopy erstellen, oder Sie können verwenden, was andere gelernt haben! In diesem Abschnitt werde ich Anwendungsfälle abdecken, wie man robocopy verwendet, um verschiedene Dinge zu erreichen.

Die Größe eines Netzwerkordners ermitteln

Bearbeiter: northendtroooper (Reddit)

> robocopy "\\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64

Schnell den Inhalt eines Ordners löschen (Unterberechtigungen ignorieren)

Bearbeiter: pizzasteveo (Reddit)

> robocopy c:\dummy c:\foldertodelete /MIR

Große Datei-Migrationen durchführen

Bearbeiter: @MySnozzberries (Twitter)

Ziel dieses Ausschnitts ist es, den Besitz aller Dateien wieder auf Administratoren zu zwingen. Anschließend fügen wir eine explizite ACE für die Administratorengruppe hinzu, um volle Kontrolle über jedes Objekt rekursiv zu haben, obwohl wir auch die Vererbung einstellen.

Schließlich führen wir eine vollständige robocopy-Kopie mit DACLs zum Ziel mit Protokollierung durch. Das Protokoll kann dann auf zusätzliche Berechtigungsprobleme oder nur Dateisperrungen überprüft werden, und später kann eine weitere Delta-Synchronisierung durchgeführt werden.

> takeown /F .\test /R /A /D Y
> icacls .\test /grant "Administrators":(OI)(CI)F /T
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

Rekursiv erzwingen Sie die Administratorengruppe als Eigentümer aller Dateien und Verzeichnisse. Es gibt möglicherweise Möglichkeiten, dies zu umgehen, aber dies ist der radikalste Ansatz und in der Regel der schnellste.

> takeown /F .\test /R /A /D Y

Sobald wir der Eigentümer sind, können wir eine neue ACE in die DACL für jedes Objekt erzwingen. Dadurch erhält die Administratorengruppe volle Kontrolle mit aktivierter Vererbung und dies rekursiv entlang des Pfads.

Wenn dies am Stammverzeichnis mit Vererbung festgelegt wird, deckt es die Umgebung ab. Wenn jedoch eine Freigabe CREATOR OWNER mit Vollzugriff enthält (was leider sogar Microsofts Empfehlung für Dinge wie Benutzerprofilspeicher ist), kann der Benutzer die Vererbung deaktivieren oder ACEs nach Belieben entfernen. Daher ist ein radikaler Ansatz in der Regel die schnellste Lösung.

> icacls .\test /grant "Administrators":(OI)(CI)F /T

Sobald wir die DACLs für die meisten Dateien geändert haben, versuchen wir, die Dateien an einen neuen Speicherort zu kopieren, was häufig bei Dingen wie Dateifreigabe-Migrationen der Fall ist. Hierfür kopieren wir die Elemente rekursiv und verwenden den Schalter /SEC, um auch die Daten/Attribute/Zeitstempel/DACLs zu kopieren.

Dann protokollieren wir den Vorgang mit vollständigen Pfaden und für alle Objekte (/V für den ausführlichen Modus) in einer Protokolldatei, damit wir die <5% der Fehler, die häufig auf Pfadlänge oder Dateisperrungen zurückzuführen sind, beheben können und detailliertere Informationen erhalten.

> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

Dies ist ein einfacher Rahmen für die Verwaltung einer Dateifreigabe-Migration mit minimalen Auswirkungen auf die Benutzererfahrung. Es verbessert auch die Kontrolle, die die IT über die Daten hat. Wenn ein Kunde eine strenge Datenverwaltungspraxis hat, bei der das Eigentum auf Ebene der Unterordner ordnungsgemäß verwaltet wird, wird dies zu einer komplizierteren Diskussion. Die meisten Kunden verwenden jedoch nur Vererbung und gruppenbasierte ACEs, daher ist dies die häufigste Situation und der Lösungsansatz, mit dem wir beginnen.

Robocopy-Alternativen

Robocopy ist ein großartiges Tool, aber es gibt viele andere ähnliche Tools, die von Interesse sein können.

  • xxcopy – Ein ähnliches Befehlszeilen-Dienstprogramm mit vielen Optionen.
  • Copy-Item-PowerShell-Cmdlet – Nicht annähernd so umfangreich, aber viel einfacher.
  • TreeSize – Ein GUI- und skriptfähiges Dienstprogramm zum Finden von Ordnerinformationen.

Zusammenfassung

Robocopy ist ein ausgezeichnetes Tool zum Kopieren großer Dateisätze. Egal, ob Sie eine Datenmigration durchführen, Ordner synchronisieren oder einfach eine schnelle Möglichkeit zum genauen Kopieren von Dateien benötigen, Robocopy ist eine gute Wahl.

Source:
https://adamtheautomator.com/robocopy/