Über Robocopy und Zeitstempel von Kopien

Robocopy ist ein Kommandozeilen-Tool aus dem Hause Microsoft zum Kopieren von Verzeichnissen. Mit seinen etlichen Kommandozeilenparametern ist es sehr vielfältig anpassbar und unterstützt sogar inkrementelles Sichern von Verzeichnissen.Der Vorteil von Robocopy ist, dass es bei auftretenden Fehlern den Kopiervorgang nicht abbricht und ihn in einer Log-Datei dokumentieren kann. In diesem Blogeintrag werde ich hauptsächlich auf die zwei Optionen /COPY:copyflags und /COPYALL sowie auf eine kleine Stolperfalle bzgl. der Ersten eingehen.

Eine Befehlszeile von Robocopy ist standardmäßig wie folgt aufgebaut: Robocopy /

Möchte man nun ein Verzeichnis kopieren sieht dies wie folgt aus:

Als Option wurde hierbei /e verwendet, was sowohl Unterverzeichnisse als auch leere Verzeichnisse kopiert.

Die Option /COPY:copyflags kopiert die angegebenen Dateiattribute, die definiert werden. Voraussetzung ist, dass das Dateisystem auf dem Quell- und Zielverzeichnis im NTFS-Format formatiert ist. Folgende Attribute stehen hierbei zur Auswahl:

  • D Daten

  • S Sicherheit (NTFS ACLs)

  • A Attribute

  • O Besitzer-Informationen

  • T Zeitstempel

  • U Informationen zur Überwachung

Wie man im obigen Bild bei "Options" sehen kann, verwendet Robocopy Standardmäßig /COPY:DAT, falls man diese Option nicht explizit angibt. Damit werden nur Daten, Attribute und Zeitstempel kopiert. Will man nun alle Parameter kopieren bietet Robocopy den Befehl /COPYALL, welcher gleichbedeutend mit /COPY:DATSOU ist. Vorsicht ist allerdings geboten, wenn man /COPY:DA ausführen will. Man gibt sich der Annahme hin, dass hier die Zeitstempel nicht mitkopiert werden, und diese somit einfach auf die Zeit des Robocopy-Kopiervorganges gesetzt werden. Dies funktioniert so leider nicht, wie folgendes Bild illustriert:

Hier sieht man unter Options, dass, obwohl man /COPY:DA angegeben wurde, weiterhin /COPY:DAT von Robocopy verwendet wird. Diese Ausnahme ist by Design so in Robocopy implementiert und in der Dokumentation liest man dazu Folgendes:

Note: If file Data is copied, then file Timestamps are also copied.

Somit ist ein Auslassen der Zeitstempelkopien mit /COPY:copyflags nicht möglich! Folgende Auflistung zeigt, was Robocopy durchführt, bei verschiedenen Parametern explizit durchführt:

  • /COPY:D -> /DCOPY:D /COPY:DT

  • /COPY:A -> /DCOPY:DA /COPY:A

  • /COPY:T -> /DCOPY:D /COPY:T

  • /COPY:DT -> /DCOPY:D /COPY:DT

  • /COPY:AT -> /DCOPY:DA /COPY:AT

Nur der Vollständigkeit halber /DCOPY:copyflags ist das Pendant zu /COPY:copyflags für Verzeichnisse.

Ich hoffe das Thema "Erneuerung von Zeitstempeln durch Robocopy.exe" hiermit ausreichend durchleuchtet zu haben. Für Interessierte finden sich weitere Optionen und deren Erklärungen unter [1].

[1] https://technet.microsoft.com/de-de/library/cc733145(v=ws.10).aspx