Robocopy ist dafür bekannt Ordner-Strukturen zu kopieren, es ist allerdings auch möglich nur eine Datei zu kopieren.
Der einfachste Befehl sieht so aus:
robocopy <Quelle> <Ziel> <Datei>
Damit die Datei nur kopiert wird, wenn Sie sich geändert hat hängt man einfach noch ein “/xo” an:
robocopy <Quelle> <Ziel> <Datei> /xo
Ein kleines Beispiel, bei dem zwischen den beiden Robocopy-Aufrufen eine Änderung an der Datei stattgefunden hat:
C:\Temp>robocopy C:\Temp C:\Temp\Dest Test.txt /xo
-------------------------------------------------------------------------------
ROBOCOPY :: Robustes Dateikopieren für Windows
-------------------------------------------------------------------------------
Gestartet: Mittwoch, 27. November 2019 19:48:33
Quelle : C:\Temp\
Ziel : C:\Temp\Dest\
Dateien : Test.txt
Optionen: /DCOPY:DA /COPY:DAT /XO /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\Temp\
------------------------------------------------------------------------------
Insgesamt KopiertÜbersprungenKeine Übereinstimmung FEHLER Extras
Verzeich.: 1 0 1 0 0 0
Dateien: 1 0 1 0 0 0
Bytes: 11 0 11 0 0 0
Zeiten: 0:00:00 0:00:00 0:00:00 0:00:00
Beendet: Mittwoch, 27. November 2019 19:48:33
C:\Temp>robocopy C:\Temp C:\Temp\Dest Test.txt /xo
-------------------------------------------------------------------------------
ROBOCOPY :: Robustes Dateikopieren für Windows
-------------------------------------------------------------------------------
Gestartet: Mittwoch, 27. November 2019 19:48:48
Quelle : C:\Temp\
Ziel : C:\Temp\Dest\
Dateien : Test.txt
Optionen: /DCOPY:DA /COPY:DAT /XO /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\Temp\
100% Neuer 20 Test.txt
------------------------------------------------------------------------------
Insgesamt KopiertÜbersprungenKeine Übereinstimmung FEHLER Extras
Verzeich.: 1 0 1 0 0 0
Dateien: 1 1 0 0 0 0
Bytes: 20 20 0 0 0 0
Zeiten: 0:00:00 0:00:00 0:00:00 0:00:00
Geschwindigkeit: 5000 Bytes/Sek.
Geschwindigkeit: 0.286 Megabytes/Min.
Beendet: Mittwoch, 27. November 2019 19:48:48
Wie man an der Ausgabe erkennen kann, wird beim ersten Aufruf die Datei übersprungen, da sich nichts geändert hat, beim zweiten Aufruf wird die Datei kopiert, da sich zwischenzeitlich eine Änderung ergeben hat. Der Vollständigkeit halber: Ganz zu Beginn wurde die Datei mit dem gleichen Befehl initial kopiert.
Kopieren via Netzwerk
Das Ganze kann selbstverständlich auch via Netzwerk erfolgen. Hierzu bietet es sich an, den Parameter “/zb” anzuhängen:
robocopy <Quelle> <Ziel> <Datei> /xo /zb
Ist das Ziel z.B. ein NAS oder ein Computer außerhalb der Domäne so lässt sich zuerst eine Anmeldung am Zielcomputer durchführen und erst dann der Kopiervorgang durchführen. Ein kleines Beispiel-Skript:
@echo off net use \\Zielserver\Freigabe <Passwort> /user:<Zielserver\Benutzername> /persistent:no robocopy "D:\Daten" "\\Zielserver\Freigabe" "Datenbank.dat" /xo /zb net use \\Zielserver\Freigabe /d /y
Rückgabewert auswerten
Generell kann man bei Robocopy über den Parameter “/log:<Dateiname>” ein Protokoll erstellen lassen. Möchte man allerdings z.B. im Fehlerfall eine Benachrichtigung erhalten, so bietet es sich an den Rückgabewert auszuwerten:
- 0 – Keine Fehler, es wurde aber auch nichts kopiert. Gilt auch für übersprungene Dateien.
- 1 – Eine oder mehr Dateien wurden fehlerfrei kopiert.
Ein Rückgabewert jenseits von 1 bedeutet im Regelfall Schwierigkeiten.
robocopy <Quelle> <Ziel> <Datei> /xo if %errorlevel% gtr 1 ( <Aktion> )
Am Beispiel mit SMTPSend lässt sich eine E-Mail versenden:
robocopy <Quelle> <Ziel> <Datei> /xo if %errorlevel% gtr 1 ( echo Fehler beim Kopieren einer Datei > e-mail.txt echo %date% - %time% - %errorlevel% >> e-mail.txt smtpsend.exe -f<Absender-Adresse> -t<Empfänger-Adresse> -h<Mailserver> -sRobocopy-Fehler -ie-mail.txt -lu<Benutzername-des-Absender> -lp<Kennwort> )
Oder mit Windows-Bordmitteln Einträge ins Ereignisprotokoll schreiben:
robocopy <Quelle> <Ziel> <Datei> /xo if %errorlevel% gtr 1 ( eventcreate /id 100 /l application /t ERROR /so "Robocopy" /d "Fehler beim Kopieren einer Datei" )
Quelle:
stackoverflow – Use Robocopy to copy only changed files?

Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 15 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
XING











Hi Andy,
Deine Beschreibung des Befehls /XO ist leider falsch. Mit diesem Befehl werden Dateien ausgeschlossen, die älter sind. Das “X” bedeutet bei Robocopy immer “excluded”.
Hier ein Zitat aus der einer Refernz von Microsoft, die leider nicht mehr online ist:
“/XO Excludes files tagged as “Older”.”
Warum wird Deine modifizierte Datei trotzdem kopiert? Per Default ist im Programmaufruf der Befehl “/COPY:DAT” eigestellt, siehe auch Deine Listings oben. Der Befehl bewirkt folgendes, auch aus der besagten Referenz:
“Selectively Copying File Data
Once a file has been selected for copying, you can choose precisely which data
associated with the file is copied using the /COPY:copyflags command line argument,
where copyflags can be any combination of the following :
· D to copy file Data
· A to copy file Attributes
· T to copy file Timestamps
· S to copy NTFS Security information (ACLs)
· O to copy NTFS Ownership information
· U to copy NTFS aUditing information
For ease of use the following alternative switches are also provided :
· /COPYALL copies everything (equivalent to /COPY:DATSOU).
· /NOCOPYcopies nothing (which can be useful if /PURGE is also used).
· /SEC copies data, attributes, and NTFS ACLs (like /COPY:DATS).
Any combination of these flags can be used, if you have the appropriate access rights.
However, if file data is copied, file timestamps are also copied.
By default Robocopy assumes /COPY:DAT, and will copy file data, attributes, and timestamps.”
Die timestamps werden automatisch in Deinem Beispiel mit übertragen, welche Robocopy vergleicht und bei einem neueren timestamp die Datei kopiert. Den Parameter “T” kann man bei “/COPY:” auch weglassen, da mit dem Parameter “D” der timestamp mitkopiert wird. Das siehst Du im Befehel “/DCOPY:DA”, da ist es ausgeführt und nur neuere directories werden kopiert, sofern im Zielverzeichnis schon vorhanden.
Gruss
Lupo
Hallo,
ich nutze auch Robocopy und es funktioniert in der Regel gut.
Es gibt nur ein Problem. Robocopy wartet nicht, bis die Datei vollständig ist.
Ich habe ein Programm, das eine *.db3 erstellt. Dies dauert allerdings etwa 5 min, bis die Datei fertig erstellt ist.
Robocopy merkt nun, das sich die Datei geändert hat und fängt an, diese *.db3 auf das NAS zu spiegeln. Allerdings haut Robocopy während dieser Aktion einen Schreibschutz rein, was dazu führt, dass das Programm, welches immer noch in die *.db3 schreibt, mit Fehlermeldung abstürzt.
Wie kann man Robocopy zwingen, nachdem es eine Änderung dieser Datei festgestellt hat, solange zu warten, bis sich die Datei für – sagen wir 2min – nicht mehr ändert?
Vielen Dank,
Franz
So spontan hätte ich da folgende Ideen:
– Robocopy per Intervall und nicht auf Änderungen ausführen lassen
– Robocopy als PostCmd zu um Erstellen der db3 ausführen lassen, sofern das Tool das her gibt
– Robocopy mit VSS nutzen (siehe hier im Blog), geht natürlich nur (gut), wenn die Anwendung VSS kann
Hallo,
vielen Dank für die Tips. Muss ich mir mal ansehen. Wobei mit der Intervallfunktion hats auch nicht geklappt.
Wenn das Tool anfängt die db3 zu erstellen kurz bevor das Robocopy Intervall abläuft, gehts auch schief, weil dann Robocopy reinhaut.
Vom Rest hab ich keine Ahnung, muss ich mich erstmal einlesen.