Robocopy kopieren / synchronisieren und Log erstellen mit aktuellem Datum

The estimated reading time 3 minutes

Robocopy kopieren / synchronisieren und Log erstellen mit aktuellem Datum

Hallo zusammen,

immer wieder kommt es vor, dass zwei oder mehr Ordner synchronisiert werden sollen. Teilweise bei Fileserver Migrationen etc.

Hierfür gibt es ein Tool, welches Microsoft ab Windows Vista / Windows Server 2008 standardmäßig bereitstellt. Für alle älteren Versionen von Windows gibt es dieses als “Windows Ressource Kit” herunterzuladen. http://www.microsoft.com/en-us/download/details.aspx?id=17657

Auf den Rechern ab Windows Vista und später kann dieses Tool über die Powershell oder die normale CMD Konsole aufgerufen werden.

Dazu WindowsTaste + R drücken und in das “Ausführen” Feld  (im Englischen RUN) CMD eingeben

nun erscheint die schwarze Konsole

01-cmd

Nun kann Robocopy eingegeben werden und die wichtigsten Optionen für diese EXE werden angezeigt.

Hier das Ergebnis:

02-robocopy

Man kann sehen, dass Robocopy immer nach dem gleichen Muster funktioniert nämlich die robocopy.exe aufrufen (.exe muss nicht dranstehen) danach kommt die Quelle (also der Ordner der kopiert werden soll), dann das Ziel ( also der Zielordner)  und dann die Optionen/ Schalter (was soll Robocopy machen)

mit dem Befehl robocopy /? können alle Optionen angezeigt werden. Eine Übersicht findet sich auch auf der Technet Website: http://technet.microsoft.com/de-de/library/cc733145(v=ws.10).aspx

Um einfach zu beginnen kann man folgendes in die CMD eintippen

robocopy  C:\Users\%username% D:\Benutzerdaten /mir

Wenn eine D Partition oder eine Festplatte vorhanden ist, spiegelt Robocopy nun euren angemeldeten Benutzer auf die D Partition (%username% ist eine Variable des Systems)

Diesen Befehl kann man nach Belieben erweitern.

Um zum Beispiel Dokumente auf meine externe NAS (Laufwerk Y:) zu sichern habe ich folgendes Script gemacht.

echo@off
robocopy C:\Users\%username%\Documents\aktuelle-Dokumente Y:\aktuelle-Dokumente /mir /R:2 /W:3 /LOG+:"Y:\Sicherungslogs\log-%date:~0,2%-%date:~3,2%-%date:~6,4%-%time:~0,2%-%time:~3,2%-%time:~6,2%.log" /TEE /NDL
pause

/R:2 = zweimaliges Versuchen bei Zugriffsproblemen

/W:3= Warte zwischen den Wiederholungen 3 Sekunden

/LOG+: = Schreibe ein Logfile in den vorgegebenen Pfad

/TEE = Anzeigen am Bildschirm (wird nur benötigt wenn ein ein Log geschrieben wird, da man sonst den Fortschritt nicht sehen kann)

/NDL = keine Verzeichnisse in die LogDatei eintragen (dient der Übersicht)

/XD = Verzeichnis auslassen

/XF =Datei auslassen

Nun erstellt mir das Robocopy eine Log Datei die fortlaufend nach dem Datum der Ausführung benannt ist

03-logs

Natürlich ist Robocopy auch batchfähig und auch dafür gedacht. Es gibt noch sehr viel mehr Funktionen, einfach mal anschauen.

Helfe auch gerne bei Problemlösungen.

Viel Spaß beim nachbauen und selber testen. Ich freue mich über Kommentare.

Zusatz:  Hier noch eine Batchdatei, die zuerst einen Ordner mit dem aktuellen Datum erstellt und dann einen beliebigen Ordner hineinsichert

@echo off
echo ########Sicherung ##############
set SICHERUNGSORDNER="C:\temp-Backups\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%-Backup"
echo Erstelle Sicherungsverzeichnis %SICHERUNGSORDNER%
mkdir %SICHERUNGSORDNER%
robocopy "C:\XXXXXXXXXX\XXXX" %SICHERUNGSORDNER% /mir /R:2 /W:3 /LOG+:"C:\log\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%.log" /TEE /NDL

Update 13.11.2018

Da immer wieder die Frage bezüglich NTFS Berechtigungen oder Zeitstempel aufkommt, hier noch weitere Parameter. Standardwert ist /COPY:DAT (Daten,Attribute,Zeitstempel)

/COPYALL (Kopiert Zeitstempel, NTFS Berechtigungen, Attribute)

/SEC (= /COPY:DATS Kopiert Daten, Zeitstempel und Sicherheitsberechtigungen)

/DCOPY:T (Kopiert Ordner Zeitstempel)

/TIMFIX (Übernimmt nur Zeitstempel von Quelle auf Ziel)

HINWEIS: der Code für das Datum funktioniert nur in BATCH Files, wird robocopy innerhalb einer PowerShell Sitzung angewendet bricht diese mit einem Fehler ab. 

Lest auch meinen Artikel zur automatischen Erstellung von Robocopy Jobs bei einer Fileserver Migration

Print Friendly, PDF & Email
  • Was this Helpful ?
  • yes   no
2.3 3 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
19 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Dominique
Dominique
2 Monate zuvor

Hallo, danke für diese schöne Übersicht. Ich habe anhand des Artikels einen Backupjob gebaut der auch incl. log funktioniert nun habe ich aber eine Frage wäre es möglich ihm zu sagen, dass er nur 20 Logs schreiben darf und ggf. der Reihe nach die alten Logs überschreibt da es sonst relativ schnell sehr unübersichtlich wird (auch bezüglich der Begrenzung im Ordner?MfG

Marco
Marco
5 Monate zuvor

Hallo, danke für das Skript, eine Frage hierzu, wie kann ich das Skript so bauen, dass jeweils nach 5 Tagen die letzten 4 Tage gelöscht werden und er dann wieder dann wieder 4 neue erstellt für die nächsten 4 tage? (Oder 7 Tage)

Ich habe hier ein Beispiel : robocopy C:\Test23\ Z:\Test23\ /MIR /R:3 /W:4 /LOG:Z:\Logdateien\logdatei.txt

Last edited 5 Monate zuvor by Marco
Manfred Mader
1 Jahr zuvor

Hallo A.K.
Ich benutze robocopy seit einigen Jahren und bin absolut überzeugt von der Qualität des Programms. Einmal pro Woche sichere ich mein komplettes Home-Verzeichnis damit (z.Zt. ca. 320GB) und erzeuge jeweils auch ein Logfile. Jetzt meine Frage:
1. Gibt es eine Zusammenstellung/Übersicht der Informationen im Logfile (was bedeuten welche Informationen, z.B. die Zahl vor der Zeile mit dem Dateinamen der gerade bearbeiteten Dateien)?
2. Gibt es eine Möglichkeit, in der Logdatei die Dateizeilen auszublenden, wo robocopy im Prinzip sagt “Alles beim alten – nix weiter getan – nächste Datei !”. Also so, dass zum Schluss nur diejenigen Dateien in der Logliste auftauchen, die im Ziel geändert wurden (Also gelöscht, neu hinzugefügt oder geändert)?
Schon mal Danke! für die Antwort.
Und bleib gesund …

Jürgen
1 Jahr zuvor

Hallo Alexander,

habe mit Robocopy bis jetzt immer gute Erfahrungen gemacht, nun stehe ich aber vor folgender Herausforderung:
Mittels robocopy sollen Files swischen einen Member-Server und Domain-Joined Server synchronisiert werden.

Problem: ich möchte nicht Benutzername/Kennwort im Klartext mit angeben um auf dem Share zugreifen zu können.

Frage: gibt es irgend eine Möglichkeit das Kennwort in verschlüsselter Form (z.B. via Powershell) zu hinterlegen?

viele Grüße,

Jürgen

André
André
1 Jahr zuvor

Hallo, ich möchte verschiedene Verzeichnisse kopieren und diese aus einer Liste auslesen lassen. Z.B. sollen in der Liste
folder1
folder2
stehen und diese beiden sollen dann in einen Zielordner Backup kopiert werden. Wie lasse ich robocopy diese Liste einlesen, so dass er mir dann folder1 und folder2 in das Verzeichnis backup kopiert?

Captain eXe
Captain eXe
2 Jahre zuvor

Hallo in die Runde,

ich habe folgende Aufgabenstellung:

Es sollen Printfiles (PCL und ZPL) aus einem Importverzeichnis von Server 1 \\server1\Import
nach
\\server2\ShipmentDocs
kopiert werden.
Aus dem Zielverzeichnis werden sie dann in eine MSSQL importiert und dort von aus über Scanevents aufgerufen.

Server1 und Server2 haben unterschiedliche User, die als local admin sämtliche Freigaben besitzen.

anschließend werden files älter 5 Tage gelöscht. Das funktioniert auch.
@echo

echo Muell
echo ####################################################

mkdir d:\zpl-muell

echo Dateien, die älter sind als 5 Tage, verschieben
echo ####################################################

robocopy.exe D:\ZPL D:\zpl-muell /E /MOVE /MINAGE:5 /R:1 /W:1 /NP /LOG+:robocopy.log /E

echo Muell Verzeichnis leeren
echo ####################################################

rmdir D:\zpl-muell /s /q

Leider komme ich bei dem Kopieren nicht voran…(push F1*F1*F1F1*F1*F1F1*F1*F1F1*F1*F1F1*F1*F1F1*F1*F1…no result… :/ )

Alexander Fink
2 Jahre zuvor

Guten Abend Herr Köhler,
ein sehr schöner Beitrag.

Mal eine vielleicht nicht all zu blöde Situation:

Ich würde mir Robocopy gerne eine lokale Datei kopieren ohne im Zielverzeichnis (Fileserver) die Optionen (MIR (/E mit /Purge) auszuführen, wegen der bereits erwähnten Löschung.
Das Zielverzeichnis beinhaltet nämlich nicht nur meine Datei vom lokalen System sondern auch die meines Kollegen, die er vielleicht dort direkt bearbeitet.

Konkret würde ich also gerne eine lokale Quelldatei auf einem Fileservice Zielort ablegen wollen.
Bisher kriege ich es nur hin, dass Ordner abgeglichen werden bzw. Quelle und Ziel immer nur Ordner akzeptiert werden; keine Dateinamen.xlsx 😉
Allgemein habe ich ein Problem mit copy und xcopy: Die unterstützen keine UNC-Pfade und ich möchte nicht zwingend ein Netzlaufwerk anbinden.
Meinen Sie, dass es mit Robocopy geht einzelne Dateien zu kopieren (entweder als Platzhalter z.B. *.xlsx oder eben gezielt eine bestimmte Datei)?

Ich hoffe, dass ich meine Frage verständlich formuliert ist.
Der “Kommentar” ist daher kein richtiger Kommentar und kann daher auch gerne gelöscht werden.
Über eine Rückmeldung, vielleicht sogar per E-Mail, würde mich freuen.

Beste Grüße
Alex Fink

Alexander Fink
Reply to  A.K.
2 Jahre zuvor

Hi Alex 😉

viiiiieeeelen Dank für die Info.

Es hat genauso funktioniert.

Allerdings habe ich im Script Variablen deklariert.
Dazu ist es wichtig zu wissen, dass man den Inhalt der Variable für Dateiname oder Wildcard mit dem Apostroph (‘) definieren muss, damit man die Anführungszeichen (“) in der robocopy-Syntax nicht mehr mit angeben muss.

Ich hatte es vorher nicht begriffen, dass ich den Dateinamen am Ende angeben muss, weil der Dateiname scheinbar gleich behandelt wird (sowohl für Quelle, als auch Ziel). Irgendwie logisch 😉

Nach ein wenig hin- und herprobieren für den Dateinamen hat das System partout die Anführungszeichen nicht angenommen, aber für die “Quelle” und “Ziel” hat es funktioniert und ist genauso erforderlich. Hier reicht das Apostroph nicht.
Vielleicht ist es noch ein Bug in Robocopy.

daher so möglich…

set quelle="C:\Quell-Pfad"
set ziel="\\remote-PC\Ziel-Pfad"
set dateiname='datei.xlsx'

Robocopy.exe %quelle% %ziel% %dateiname%

…und dann kann man auch die Variablen einfach in der Robocopy-Syntax verwenden.

Zusatzinfo der Vollständigkeit halber (nice2know):

Man kann beim Dateinamen durch Leerzeichen mehrere Dateien bzw. Wildcards, auch in Kombination angeben, sodass mögliche vorhandene Dateitypen für die Dateiübertragung einbezogen werden:

z.B.: set dateien=’Exceldatei.xlsx *.exe *.docx *.etc’

Vielen Dank noch einmal.

Beste Grüße
Alex

Oli
Oli
2 Jahre zuvor

Hallo,
ich bin dringend auf der Suche nach einer Lösung für folgendes Problem:

Bisher habe ich eine einfache Batch-Datei zur Datenübertragung mit xcopy gemacht. Ich habe einen Quellordner an dem ich täglich arbeite. Am Ende des Arbeitstages will ich mithilfe meiner Batch-Datei alle geänderten und neuen Dateien auf mein Ziellaufwerk übertragen. Mit xcopy war das danke des Befehls “/d” (Kopiert alle Quelldateien, die neuer sind als die im Ziel befindlichen Dateien) eine einfache Lösung. Leider stößt der Ordner inzwischen an die 255-Zeichen-Grenze, weshalb ich auf robocopy umsteigen muss. Ich finde aber keinen äquivalenten Befehl vom Umfang “/d”, der mir ermöglicht ohne weitere Datum-Eingabe ein wachsendes Verzeichnis zu pflegen..

Können Sie mir weiterhelfen?

Liebe Grüße
Oli

Oliver
Oliver
Reply to  Oli
2 Jahre zuvor

Ich nehme für ähnliche Szenarien robocopy /E
Bei /MIR besteht die Gefahr, dass eine versehentlich in der Quelle gelöschte Datei auch gleich im Backup-Ziel gelöscht wird. Somit etwas “riskant” für eine tägl. inkrementelle Sicherung.

Klaus
Klaus
4 Jahre zuvor

Hi Alex und Verena
danke für die Hilfe.

Gruß Klaus