PC-Notfallhilfe

Tipps und Tricks aus der IT Welt

Windows ROBOCOPY besser als copy und xcopy für Backups und Synchronisationen

| 32 Kommentare


Hi,

heute möchte ich euch etwas vorstellen, dass eigentlich nicht NEU aber trotzdem nicht allzu bekannt ist. Die Möglichkeit mit Windows Bordmitteln ein Backup/Synchronisation eurer Dateien zu machen.

Das Zauberwort (oder-Befehl) lautet ROBOCOPY.

Wer schon mit copy und xcopy gearbeitet hat, kennt bestimmt einige Parameter, die man anhängen kann, um das kopieren von Dateien steuern zu können. Robocopy bringt einiges mehr mit. Wer sich schon mal vorab ein Bild machen will, ruft sich eine Windows-Konsole auf (Start –> cmd –> Enter) und gibt ein: robocopy /?

Als erstes wird die grundlegende Syntax (der Befehlsaufbau) angezeigt und nachfolgend eine Menge von zusätzlichen und sehr nützlichen Parametern unterteilt in mehreren Options-Abschnitten.

Kopier-Optionen

Dateiauswahl-Optionen

Anführungsstriche

Wiederholung-Optionen

Protokoll-Optionen

Job-Optionen

Hier ist jeder selbst gefragt, sich das Beste rauszusuchen. Was ich Euch zeigen möchte, sind einige Anwendungsbeispiele und welche Parameter man am besten setzt.

Fangen wir mal grundsätzlich an und nach und nach werden wir dann spezieller.

Kurzer Hinweis, bevor es gleich los geht.
Wenn ihr aus diesem Artikel Teile von ROBOCOPY Befehlsparametern und andere Teile aus den Beispielen der BATCH kopiert, dann bitte unbedingt darauf achten, dass die Anführungsstriche nach dem Einfügen bei Euch durch „Eure“ eigenen neu gesetzt, also ersetzt werden.

Beispiel:
Wenn ihr den folgenden, in Anführungsstriche gesetzten Satz, von hier kopiert und bei Euch (meist in einem Texteditor) einfügt dann werden diese 1:1 übernommen.

„Satz in Anführungsstriche“

Das heisst am Anfang des Wortes unten und am Ende oben. Wenn ihr in eurem Editor Anführungsstriche nutzt, dann sind diese am Anfang- und Ende beide oben.

Anführungsstriche

Eure Batch funktioniert aber nur mit den im Editor gesetzten Anführungsstrichen !!!!!

  • Ein Grundsatz ist, das Groß-/Kleinschreibung ignoriert wird. Ihr könnt robocopy oder ROBOCOPY schreiben und auch die Parameter können /s oder /S geschrieben werden. Eine Unterscheidung dient nur der besseren Lesbarkeit aber seht selbst
  • Befehlssatz: ROBOCOPY Quelle Ziel [Datei [Datei]…] [options] –> (die eckigen Klammern zeigen nur an, dass dieses optional also nicht zwingend angegeben werden muss)
    • Quelle / Ziel :: entweder ein Laufwerk mit Buchstaben –> C:\wo-auch-immer oder ein Netzwerkpfad –> \\wo-auch-immer\im-netz
    • Datei :: Die Datei selber –> textdatei.txt
    • Beispiel: c:\temp c:\ap\robo-backup\ hotfix.txt
    • Bedeutet, ich möchte aus dem Ordner c:\temp in den Ordner c:\ap\robo-backup\ die Datei hotfix.txt kopieren.

Was man beim ROBOCOPY Output sieht ist, dass es Standardeinstellungen seitens ROBOCOPY gibt. Ich hatte im obigen Beispiel keine Parameter (options) angegeben aber in dem Ausgabebericht kann man sehen, welche Optionen gesetzt sind.

robocopy

 

 

 

  • /COPY:DAT
  • /R:1000000
  • /W:30

/COPY:DAT

D = Data (Inhalt der Datei)
A = Attributes
T = Timestamps

Es gibt für den Parameter /COPY noch weitere „Schalter“

S = Security = NTFS Zugriffsrechte
O = Owner
U = aUditing (Überwachungsoptionen werden mit kopiert)

Der komplette Befehl für /COPY mit allen Schaltern würde /COPY:DATSOU lauten, man kann auch /COPYALL schreiben.

/R:1000000

Standardmäßig versucht ROBOCOPY 1Millionmal, eine Datei zu kopieren, sollten Probleme (offene Dateien) auftreten.

/W:30

Standardmäßig versucht ROBOCOPY 30 Sekunden lang eine Datei zu kopieren, sollten Probleme (offene Dateien) auftreten.

Das bedeutet, dass ROBOCOPY 30 Millionen Sekunden = 500.000 Minuten = 8333,33 Stunden = 347,22 Tage lang versuchen würde eine Datei zu kopieren.

*******************************************

Anwendungsbeispiele (reine Kopier-Beispiele —-> die Report- Anzeige- und sonstigen „Begleit“-Einstellungen erwähne ich weiter unten):

  • Spiegelung oder 1:1 Kopie mit –> /E /PURGE oder –> /MIR
    • Beispiel 1:
      • robocopy C:\quelle Z:\ziel /E /PURGE /R:1 /W:1
        • /E kopiert alle Quell-Dateien ins Zielverzeichnis samt Unterverzeichnissen (Ordner), auch leere Ordner
        • /PURGE löscht ALLE Dateien im Zielverzeichnis, die NICHT (mehr) im Quellverzeichnis vorkommen
        • /R:1 /W:1 es wird 1 Mal und 1 Sekunde lang probiert zu kopieren, bei Problemen (offene Dateien)
    • Beispiel 2:
      • robocopy C:\quelle Z:\ziel /MIR /R:1 /W:1
        • /MIR ersetzt /E und /PUR –>/MIR kopiert alle neuen und geänderten Dateien und löscht alle Dateien im Ziel, die in der Quelle nicht vorkommen.
        • /R:1 und /W:1 wie oben beschrieben
  • Inkrementelle Sicherung mit Parameter –>/M
    • /E kopiert alle Quell-Dateien ins Zielverzeichnis samt Unterverzeichnissen (Ordner), auch leere Ordner
    • /M kopiert nur Dateien mit gesetztem Archivbit und setzt das Archivbit nach dem Kopieren wieder zurück
    • Beispiel: C:\quelle Z:\ziel /E /M /R:1 /W:1robocopy_2
    • Ich habe in meinem Bildbeispiel den Schalter /S verwendet um auch gleichzeitig zu demonstrieren, dass hierbei der leere Ordner (als „leerer ordner“ beziffert) nicht mit kopiert wirdrobocopy_1
  • Schön zu sehen hier, wie das Archivbit -a vom Quellverzeichnis entfernt wird (gelbe Markierung)
    **********************************

    Differentielle
    Sicherung mit Parameter –>/A

    • /E kopiert alle Quell-Dateien ins Zielverzeichnis samt Unterverzeichnissen (Ordner), auch leere Ordner
    • /A kopiert nur Dateien mit gesetztem Archivbit aber ändert das Archivbit nach dem Kopieren NICHT
    • Beispiel: robocopy C:\quelle Z:\ziel /E /A /R:1 /W:1

klick) Am Ende des Artikels wird der grundsätzliche Unterschied zwischen inkrementellem und differentiellem Backup erläutert

 

  • Beispiel einer Sicherung (1:1 Kopie) des Benutzerprofiles (USERPROFILE)
    • robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1
    • Erklärung:
      • %userprofile% –> Man kann als Quelle auch Systemvariablen nehmen, um variabel zu bleiben (Entspricht unter Win7 –> C:\Benutzer\[Benutzername])
      • %username% –> Damit man im Ziel auch den gleichen Benutzernamen als Ordnername hat….
      • /B –> Backup Mode (das erlaubt ROBOCOPY die in der NTFS ACL hinterlegten Rechte zu überschreiben, wenn notwendig. Benötigt Adminrechte)
      • /MIR –> die „Spiegelvariante“. Löscht im Ziel alles was nicht in der Quelle vorhanden ist. Hier könnte man auch die Schalter /A oder /M nehmen wie oben beschrieben.
      • /R:1 und /W:1 –> einen Versuch bei einer Sekunde Verzögerung, kann auch so eingestellt werden/R:0 und /W:0

Jetzt wird es Zeit, ein paar Schritte weiter zu gehen und etwas variabler zu werden. Zum einen werden wir uns „Batchdateien“ anlegen und zum anderen werden wir innerhalb dieser Batchdateien „variabel“ werden.

  1. wir legen uns eine Datei an mit Namen rc-backup.bat
  2. wir öffnen diese Datei mit einem Editor
  3. wir tragen einen der oben genannten robocopy Befehle ein, z.B. zur Sicherung des Benutzerprofiles, also: robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1
  4. wir speichern die Datei und führen sie anschließend mit einem Doppelklick aus

Was passiert? Wer wenig Dateien/Ordner zu kopieren hat, bei dem flackert kurz ein dunkler Bildschirm auf und verschwindet wieder. Wer ein größeres Profil zu sichern hat, bei dem bleibt die Konsole länger stehen, diese verschwindet dann wieder, sobald robocopy seinen Dienst verrichtet hat. Was wurde nun gesichert? Wurde überhaupt gesichert? Um hier Klarheit zu haben, kann man sich alles was robocopy im Hintergrund tut, protokollieren lassen. Genau, mit einem weiteren Parameter.

Die 3 wesentlichen seien hier aufgeführt:

  • /LOG:file –> Beispiel: robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /LOG:C:\protokoll-ordner\protokoll.txt
  • /LOG+:file –> Das gleiche wie eins höher, nur hier werden mit dem + Zeichen alle folgenden Protokolle angehängt, in der obigen Variante werden ältere überschrieben
  • /L –> das ist ein ganz interessanter Schalter auf den ich im Einzelnen noch zurückkommen werde. Soviel vorab: Ist dieser gesetzt wird NICHTS kopiert, sondern nur protokolliert, quasi als Kontrolle, was wären wenn…….

Sobald einer der beiden Parameter /LOG (mit oder ohne +) gesetzt wurde, werden alle Kopiervorgänge in diese protokoll.txt geschrieben…..aber nichts mehr am Bildschirm ausgegeben. Wer trotzdem auch am Bildschirm mit verfolgen will, was robocopy treibt, kann das mit dem Parameter /TEE realisieren und wer sich nur die „wesentlichen“ Ausgaben, ohne z.B. Ordnerliste, Dateiliste, Kopierfortschritt (prozentualer Kopierfortschritt) anschauen will, sollte die Schalter /NDL /NFL /NP  hinzufügen. Jetzt werden nur noch der Job-Header, die „echten“ Fehlermeldungen (ERROR 32 (33) = Datei (oder Teile) in Benutzung durch anderen Prozess / Error 5 = Access is denied oder *Extra File (alle NEUEN Dateien im Ziel) und die Job-Summary in der Konsole angezeigt und in die protokoll.txt eingetragen.

Damit sieht unser Befehl in unserer Batchdatei folgendermaßen aus:

robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /TEE /NDL /NFL /NP  /LOG+:C:\protokoll-ordner\protokoll.txt

Damit kann man erst einmal die wichtigsten Backups anlegen, indem man nur die Quell und Zielordner austauscht und alle anderen Parameter beibehält.

ABER ACHTUNG:
Man muss sich mit den Parametern /MIR und der Kombination /E + /PURGE im Klaren sein, dass hier gespiegelt wird, also Dateien/Ordner im Ziel gelöscht werden, die in der Quelle nicht (mehr) vorhanden sind. Wer will kann die beiden Parameter durch /E oder /S mit den oben erwähnten /A und /M ersetzen und somit zwei unterschiedliche Arten von Batchdateien erzeugen. Eine nur für Spiegelungen (/MIR) und eine für reine Kopien, ohne das im Zielverzeichnis gelöscht wird

 

Nun einen kleinen Schlenker weg von robocopy und hinein in die Batchdatei, denn so eine Protokolldatei kann schon sehr groß und unübersichtlich werden, im Laufe der Zeit. Daher tragen wir in der Batch etwas ein, das uns immer eine Protokolldatei pro Tag erstellt und damit die Anzahl der Dateien nicht überhand nehmen, löschen wir alle Protokolldateien, die älter sind als 7 Tage.

Im Moment sieht unsere Batch so aus:

robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /TEE /NDL /NFL /NP  /LOG+:C:\protokoll-ordner\protokoll.txt

Wir tragen über diesem Befehl folgendes in die Batch ein:

SET _DATUM=%date:~-4,4%-%date:~-7,2%-%date:~-10,2%

und ändern unseren robocopy Befehl folgendermaßen ab:

robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /TEE /NDL /NFL /NP  /LOG+:C:\protokoll-ordner\protokoll-%_DATUM%.txt

Zur Erklärung:

Mit dem Befehl SET erzeugen wir eine Variable, mit dem Namen, der auf SET folgt, hier _DATUM.
Der Unterstrich sorgt nur dafür, das ich mit keiner Systemvariablen vom Namen her kollidiere. Dieser Variable _DATUM könnte man auch einfach das Tagesdatum (date) zuordnen, aber dann würde die Protokolldatei z.B. protokoll-08.10.2014.txt heißen. Zur besseren Sortierung (nicht nach dem Tag sondern Jahr-Monat-Tag (YYYY-MM-DD)) zerlegen wir den Inhalt von date.

  • %date% –> der Inhalt von date = 08.10.2014
    • %date:~-4,4% –> gehe von rechts 4 Stellen und gib mir 4 Zeichen nach rechts aus = 2014
    • %date:~-7,2% –> gehe von rechts 7 Stellen und gib mir 2 Zeichen nach rechts aus = 10
    • %date:~-10,2% –> gehe von rechts 10 Stellen und gib mir 2 Zeichen nach rechts aus = 08
    • _DATUM wird dann zusammengesetzt und jede „Einheit“ mit einem Bindestrich (in rot) verbunden –>%date:~-4,4%%date:~-7,2%%date:~-10,2%
    • die Ausgabe einer Variablen wird mit Prozentzeichen (%variable%) maskiert

Jetzt fehlt nur noch der Eintrag am Ende, der dafür sorgt, dass alle txt Dateien dieses Protokollordners, älter 7 Tage gelöscht werden.
Damit wir innerhalb der Batch auch ein bisschen Struktur rein bekommen, können wir bestimmte Abschnitte auch kommentieren. Jeder Kommentar einer Zeile wird mit zwei Doppelpunkten eingeleitet ::

Unsere Batch sieht demnach so aus:

:: Datum umsetzen in YYYY-MM-DD
SET _DATUM=%date:~-4,4%-%date:~-7,2%-%date:~-10,2%

:: SPIEGELUNG
robocopy %userprofile% z:\ziel\%username% /B /MIR /R:1 /W:1 /TEE /NDL /NFL /NP  /LOG+:C:\protokoll-ordner\protokoll-%_DATUM%.txt

:: Löschen aller txt Dateien älter 7 Tage
forfiles /P „C:\protokoll-ordner\“ /M *.txt /S /D -7 /C „cmd /c del @File“ 2>&1 | find /v /i „ERROR: No files found with the specified search criteria.“

 

Wer das Prinzip mit den Variablen innerhalb einer Batchdatei „gefressen“ hat, wird sich bestimmt überlegen, ob man nicht die einzelnen Befehlsteile / Parameter von robocopy in solche Variablen packt. Gut weiter gedacht, machen wir auch aber später…..

…………………..Fortsetzung folgt immer mal wieder vorbei schauen………………….

……………….Über Anregungen als Kommentar würde ich mich freuen……………..

Noch ein paar ROBOCOPY Anwendungs-Beispiele:

Wenn man nur die Ordnerstruktur „OHNE“ jegliche Dateien kopieren möchte, dann so:
ROBOCOPY „QUELLE“ „ZIEL“ /MIR /XF ExFile *.*

Wenn man nur den ersten Ordnerlevel kopieren möchte dann so:
ROBOCOPY „QUELLE“ „ZIEL“ /MIR /LEV:1

**************************************************************************************************

Grundsätzliche Erläuterung zum Unterschied eines inkrementellen und differentiellen Backups

  • Bei beiden Versionen wird als erstes eine Komplettsicherung (KS) aller Dateien angelegt
  • Bei beiden Versionen wird eine erste Teilsicherung (TS1) aller zur KS geänderten und neuen Dateien angelegt
  • Bei der inkrementellen Sicherung wird eine weitere TS2 für alle nach der TS1 geänderten und neuen Dateien erstellt
    • Vorteil: schnelle Sicherung
    • Nachteil: Für die Wiederherstellung werden ALLE Teile (KS + TS1 + TS2 + …TSn) benötigt
  • Bei der differentiellen Sicherung wird eine weitere TS2 für alle nach der KS geänderten und neuen Dateien erstellt
    • Vorteil: Für die Wiederherstellung werden nur die Sicherungen: KS + TSn (letzte Teilsicherung) benötigt
    • Nachteil: Verbraucht mehr Platz, dauert länger (da die Datenmenge stetig wächst)

 zurück)


32 Kommentare

  1. Sehr geehrte Damen und Herren,
    ich bitte um Hilfe bzw. Bekanntgabe der genauen Parameter unter robocopy fuer folgenden Vorgang: Auf der Festplatte c befindet sich ein Ordner mit dem Namen Objekte. Die Dateien in diesem Ordner möchte ich inkrementell in einen Ordner im Stick f: mit dem Namen Objekte kopieren. Ich schaffe hier trotz stundenlanger Anstrengungen die richtige Parameter Bezeichnung nicht. Das ist anscheinend sehr kompliziert. Danke fuer Ihre Benuehungen. Mit freundlichen Gruessen Kuehner

    • Hallo,

      die Hilfestellungen, die wir hier gerne geben, können nur Empfehlungen sein. Bitte überprüft vorher genau, was wir hier Euch mitteilen und das was ihr dann umsetzt. Am Besten erst an einem Beispiel mit unsensiblen Daten ausprobieren.
      Eine Inkrementelle Sicherung signalisiert man mit dem Schalter /M.

      Beispiel: C:\quelle Z:\ziel /E /M /R:1 /W:1

      In diesem Fall würde ich folgendes eingeben:

      Robocopy C:\Objekte F:\Objekte /E /M /R:1 /W:1

      LG John

  2. Hallo,

    ich finde diese ausführliche Beschreibung ist sehr gelungen!

    Nun meine persönliche Frage: Ich habe auf meinem Server im Ordner „D:\STORAGE“ alle meine Daten, welche ich vollständig auf eine weitere intern verbaute Platte spiegeln möchte, liegen.

    Wenn ich es richtig verstanden habe, reicht dazu einfach der Befehl /MIR?

    Oder sollten noch weitere Parameter hinzu? Ich bin mir bewusst, dass im Zielordner Daten gelöscht werden, wenn diese in der Quelle gelöscht wurden. Dies ist ausdrücklich erwünscht.

    LG Julian

    • Hallo Julian,

      Ja, du hast es richtig verstanden, es reicht einfach der PARAMETER /MIR.
      Alle zusätzlichen Parameter erfüllen eben „zusätzliche“ Dinge. Allein das Spiegeln und Gleichstellen, aller Dateien und Verzeichnisse im Quell-, wie Zielordner macht /MIR ganz alleine.
      Wenn du dir noch nicht sicher bist, kannst du auf der CMD Shell robocopy /? eingeben, dann erhältst du die Hilfe mit allen Parameteren angezeigt.
      LG John

  3. hallo zusammen

    ich habe da ein echtes problem ….

    meine Vorstellung: Automatisches Backup meiner Datein auf eine externe Festplatte an meiner Fritz.Box

    Ich bin wie folgt vorgegangen … ich habe mir eine Batch Datei geschrieben die wie folgt aussieht
    Code:

    @Echo on
    „C:\Windows\system32\robocopy.exe“
    „F:\Neuer _Ordner“ „Y:\.“ /E /ZB /Log:“Y:\%DATE%.txt

    ich habe die datei auch in den Ordner C:\Windows\System32\GroupPolicy\Machine\Scripts\Sh utdown kopiert und diese unter Start / Ausführen / gpedit.msc eingepflegt. der Script wird ja auch ausgeführt beim runterfahren nur habe ich da noch folgenedes Problem:

    1. er kopiert die Datein im Hautverzeichnis von dem Ordner jedoch nicht im Unterordner obwohl ich den Befehl gegeben habe ( /E ) …
    2. beim runterfahren fährt er so schnell runter das ich denke das er keine zeit hat diesen Ordner zu kopieren.
    3. ich habe die Festplatte als Netzlaufwerk eingebunden da ich keinen richtigen Befehl gefunden habe das sich robocopy mit Username und Passwort auf meine Fritzbox einloggen kann.

    Ich hoffe ihr könnt mir da Irgendwie helfen .. wenn noch fragen sind oder was missverstandlich sein sollte einfach schreiben.

    Danke

    • Hallo Daniel,

      zuerst würde ich das Script ohne Einbinden in die Shutdown Routine ausprobieren. Funktioniert die Batch per Doppelklick?
      Beim Runterfahren des Rechners werden u.a. auch alle Netzlaufwerke „gekappt“. Es kann sein das Windows zwar auf die Batch wartet aber die kann nicht sauber durchlaufen, weil „Y:\“ nicht mehr vorhanden ist.
      Dann würde ich nach der robycopy (also wenn der Backupprozess durchgelaufen ist) das Herunterfahren über diese Batch steuern (shutdown.exe).
      Schreib uns bitte wieder wie deine Lösung aussieht, wenn du noch Fragen hast auch….
      LG John

  4. Hallo John Doe,
    auch ich benötige deine Hilfe bei einem Problem was ich habe und eventuell mit Robocopy lösen könnte.
    Habe eine Festplatte mit einem S.M.A.R.T. Fehler und möchte mithilfe von Robocopy alle Dateien auf eine andere Festplatte kopieren, wobei ein Protokoll erstellt werden soll, welches protokolliert, was kopiert werden konnte/nicht kopiert werden konnte. Denn dabeizusitzen und mir jede Datei zu notieren, die nicht kopiert werden konnte, würde wahrscheinlich ewig dauern, deshalb dachte ich daran alle Dateien die nicht kopiert werden konnten, werden „übersprungen“ und protokolliert, so dass ich nachher weiß was vollständig kopiert wurde und was nicht. Ich hoffe, man kann verstehen was ich meine.
    Habe im Netz schon viel gesucht und hoffe, dass ich das mit Robocopy so machen kann, nur leider fehlt mit das know-how.

    Für Hilfe wäre ich sehr dankbar!

    Mit freundlichen Grüßen Habster

    • Hallo Habster,
      ich nutze Robbocopy selber zum „Syncen“ (Schalter /E) und „Spiegeln“ (Schalter /MIR).
      Dabei erstelle ich mir eine BATCH Datei und führe die dann mit Adminrechten aus.
      Ich zeige dir hier einmal, wie ich das mache. Solltest du damit nicht klar kommen, dann schreib mir einfach nochmal, woran es scheitert.
      Lies dir bitte meinen Text bis zum Ende durch und fange dann erst an !!!!
      Ich nenne deine kaputte Festplatte LwBad (im Script c:) und deine neue Festplatte LwSave (im Script b:). Du musst das dann einfach nur anpassen.
      Erzeuge bitte auf deinem LwSave eine Datei (den Namen kannst du dir aussuchen, am besten keine Leerzeichen, z.B. rc_LwBad—-LwSave.bat)
      In diese Datei schreibst du folgendes: (Alles zwischen Schnipp und Schnapp, kannst du mit copy paste übernehmen)
      ————————–SCHNIPP—————————
      @ECHO OFF
      ::Setzt Hintergrund und Schriftfarbe
      color 0A
      CLS

      TITLE ROBOCOPY Sicherung

      ECHO ***************************************
      ECHO LwBad nach LwSave
      ECHO ***************************************
      ECHO.

      :: Variables
      :: Datum in Form YYYY-MM-DD
      SET _MYDATE=%date:~-4,4%-%date:~-7,2%-%date:~-10,2%
      SET _SOURCE=c:
      SET _DESTINATION=b:
      SET _OPTIONS=/NP /X /V /TS /FP /TEE /E /B /XJ /R:1 /W:1 /log+:“b:\logs\save_logs-%_MYDATE%.txt“
      :: SET _EXCLUDE_DIRS=/XD „My Music“ /XD „My Videos“ /XD „My Pictures“
      :: SET _EXCLUDE_FILES=/XF „*.pst“
      Set _SWITCH=%_OPTIONS% %_EXCLUDE_DIRS% %_EXCLUDE_FILES%

      Robocopy %_SOURCE% %_DESTINATION% %_SWITCH%

      ————————–SCHNAPP—————————
      Zur Erklärung:
      color 0A –>Setzt Hintergrund und Schriftfarbe
      CLS –> leert den aktuellen Screen
      TITLE ROBOCOPY Sicherung –> Das wird die Überschrift in dem Windowsfenster
      Alles hinter ECHO wird im Screen ausgegeben
      SET _MYDATE=%date:~-4,4%-%date:~-7,2%-%date:~-10,2% –> Füllt die Variable _MYDATE mit dem Datum in Form YYYY-MM-DD
      SET _SOURCE=c: –> Füllt die Variable mit dem Quelllaufwerk. Bitte darauf achten KEINEN Backslash am Ende (kein „\“ am Ende) !!!! Den setzt RC selber
      SET _DESTINATION=b: Füllt die Variable mit dem Ziellaufwerk. –> ebenfalls kein Backslash am Ende
      SET _OPTIONS=/NP /X /V /TS /FP /TEE /E /B /XJ /R:1 /W:1 /log+:“b:\temp\logs\save_logs-%_MYDATE%.txt“
      –> Das sind die Parameter, die RC anweisen, was zu tun ist
      :: LOG-PARAMETER
      /NP –> Kein Status – der Prozentsatz kopierter Elemente wird nicht angezeigt.
      /X –> Meldet alle zusätzlichen Dateien, nicht nur die ausgewählten Dateien.
      /V –> Erstellt eine ausführliche Ausgabe mit ausgelassenen Dateien.
      /TS –> Schließt Zeitstempel von Quelldateien in die Ausgabe ein.
      /FP –> Schließt den vollständigen Pfadnamen von Dateien in die Ausgabe ein.
      /TEE–> Gibt Daten in das Konsolenfenster und die Protokolldatei aus.
      :: KOPIER-PARAMETER
      /E –> Kopiert Unterverzeichnisse, einschließlich leerer Unterverzeichnisse.
      /B –> Kopiert Dateien im Sicherungsmodus
      /XJ –> Verhindert das Kopieren von „Verknüpfungen“
      /R:1 und /W:1 –> R gibt die Anzahl der Versuche und W die Wartezeit in Sekunden, die RC versucht, eine nicht kopierbare Datei zu kopieren
      /log+:“PFAD\DATEINAME“ –> gibt an, wohin die LOG Datei geschrieben werden soll. Der Pfad muss existieren, sonst wird keine LOG Datei erstellt !!!!

      Ich hoffe dir hiermit geholfen zu haben. Über ein Feedback würde ich mich freuen.
      LG John

  5. Hallo,

    ich habe versucht den Abschnitt zum löschen der Logdateien umzusetzen. (Windows 10)
    :: Löschen aller txt Dateien älter 7 Tage
    forfiles /P „C:\protokoll-ordner\“ /M *.txt /S /D -7 /C „cmd /c del @File“ 2>&1 | find /v /i „ERROR: No files found with the specified search criteria.“

    Allerdings bekomme ich dabei eine Fehlermeldung:
    Find hat ein Problem mit den Parametern und die “ werden iregndwie nicht richtig umgesetzt. Kann mir einer helfen? Danke

    C:\Users\User\Desktop\YARCGUI\YARCGUI\Skripts>forfiles /P äC:\Users\User\Des
    ktop\YARCGUI\YARCGUI\Logs\ô /M *.txt /S /D -7 /C äcmd /c del @Fileô 2>&1 | fi
    nd /v /i äERROR: No files found with the specified search criteria.ô
    FIND: Parameterformat falsch

    • Hallo Juergen,
      ich hoffe, du hast die Befehlszeile nicht 1:1 übernommen. „C:\protokoll-ordner“ muss natürlich an den Ordner angepasst werden, in dem deine Robocopy Logfiles gespeichert werden.
      forfiles /P „C:\protokoll-ordner\“ /M *.txt /S /D -7 /C „cmd /c del @File“ 2>&1 | find /v /i „ERROR: No files found with the specified search criteria.“

      forfiles durchsucht den Pfad, der hinter /P steht: forfiles /P „C:\protokoll-ordner\“ (In diesem Fall den Ordner „C:\protokoll-ordner\“, wenn es Ihn gäbe).
      Hinter /M kommt die „Maske oder Filter“ aller Dateien, die gefunden werden sollen. Hier alle TXT Dateien „*.txt“
      /S sorgt dafür, dass auch Unterordner durchsucht werden.
      /D und eine Zahl dahinter gibt an, wie viel Tage berücksichtigt werden, nach dem letzten modifizierten- (Speicher-) Datum. Hier: /D -7 (7 Tage in die Vergangenheit)
      /C kündigt einen Commandbefehl an, was mit diesen Dateien gemacht werden soll. Hier sollen alle Dateien gelöscht (del) werden.
      Sollten keine entsprechenden Dateien gefunden werden, würde der DEL Befehl die Fehlermeldung: „ERROR: No files found with the specified search criteria.“ auswerfen. Um dies zu unterdrücken (und nur diese), muss am Ende find /v /i „ERROR: No files found with the specified search criteria.“ angefügt werden.
      Check das mal in Ruhe und schreibe, ob ich weiter helfen soll.
      LG John

      • Hallo John,

        ich habe das schon einige Male geprüft. Meine eigenen Pfade stehen da eingetragen.
        Eigentlich alles richtig. Was mich nur stutzig macht sind neben dem „FIND: Parameterformat falsch“ auch die „Sonderzeichen“ innerhalb des Befehls. Statt “ werden da ä angezeigt…. LG Jürgen

        • Hallo Jürgen,
          ja das hatte ich auch gesehen. Kopiere doch mal alles in den Editor rein, um die Formatierungen raus zubekommen. Und danach dort wieder rauskopieren und in eine CMD Shell eingeben und sehen was passiert. LG John

  6. Hallo John,

    gerade ausprobiert…

    forfiles /P „C:\logs\“ /M *.txt /S /D -7 /C „cmd /c del @File“ 2>&1 | find /v /i „ERROR: No files found with the specified search criteria.“

    FIND: Parameterformat falsch

    • Hallo Jürgen,

      entferne doch mal die „Gänsefüßchen“, vor und nach >>ERROR: No files found with the specified search criteria.<< und schreibe die neu. Wie du siehst, stehen die im obigen Kommentar am Anfang unten und am Ende oben. Das ist bestimmt aus Word rauskopiert worden. Schreibe mal bitte ob es das war. LG John

  7. Hallo John,

    auch das habe ich probiert, die Gänsefüßchen neu zu schreiben…. „Gänsefüßchen“ oder auch so „Test“ …. immer der gleiche Fehler mit dem Find.

    • Hallo Jürgen, ich habe meinen Code noch einmal analysiert.
      Es waren mehrere Sachen nicht richtig. Mit diesem Code hat er alle TEXT Dateien älter 7 Tage gelöscht. Du darfst hinter dem Pad keinen Backslash mehr haben, also „b:\temp\logs“ anstatt „b:\temp\logs\“.
      forfiles CMD find
      Dann unbedingt ALLE Anführungsstriche erneuern. Die vom Pfad, vom CMD Befehl und vom Fehlertext. Dann habe ich den deutschen Fehlertext genommen, der wird bei mir angezeigt, ohne 2>&1 | find /v /i …… und unterdrückt mit 2>&1 | find /v /i ……..
      forfiles CMD find
      Der korrekte Befehl sieht bei mir dann so aus:
      forfiles /P „b:\temp\logs“ /M *.txt /S /D -7 /C „cmd /c del @File“ 2>&1 | find /v /i „FEHLER: Es wurden keine Dateien mit den angegebenen Kriterien gefunden.“
      Wenn du das jetzt rauskopierst, denke an die „Gänsefüßchen“ !!!!!!
      LG John

  8. Ich hätte da noch eine Idee was du einbringen könntest

    Und zwar ich habe eine Ordnerstruktur mit Inhalt
    Die Aufgabe wäre nun diese Struktur zu kopieren aber ohne Inhalt und nur die Erste Ebene der Struktur zu kopieren. Ist das möglich ?

    • Hallo Patrick,
      ja das ist möglich, ich melde mich die Tage nochmal dazu……LG John

      • Hello again,
        ich würde das mit zwei Robocopy Befehlen nacheinander lösen. Die „Kurzversion hier:
        ROBOCOPY „QUELLE“ „ZIEL“ /MIR /XF ExFile *.*
        ROBOCOPY „QUELLE“ „ZIEL“ /MIR /LEV:1
        Der erste Befehl erzeugt alle Ordner und Unterordner aber schliesst das Kopieren von ALLEN Dateien (/XF ExFile *.*) aus
        Der zweite Befehl beschränkt das Kopieren auf den ersten Ordnerlevel (/LEV:1)
        In meinem Beispiel habe ich den Ordner b:\temp\rc_test mit seinen Unterordnern …sub1 …sub2 ….sub3 nach b:\temp\rc_test_copy kopieren wollen.
        Robocopy Ordnerstruktur
        LG John

  9. Hallo,

    das funktioniert nun. Ich habe mittlerweile ein Minitool gefunden, delage32, mit dem kann man das auch machen… Parameterübergabe…

    Danke LG Jürgen

    • Hallo Juergen, vielen Dank für deine Rückmeldung. Das freut mich !!!!
      Woran lag es?
      delage32 kenne ich aber ich will lieber mit Windows Boardmitteln arbeiten (soweit es geht). Aber danke für den Hinweis.
      LG John

  10. Hallo John,

    forfiles /P „c:\logs“ /M *.txt /S /D -3 /C „cmd /c del @File“ 2>&1 | find /v /i „FEHLER: Es wurden keine Dateien mit den angegebenen Kriterien gefunden.“

    Der Unterschied zur ersten Version ist eigentlich nur der C:\logs\ und die Anführungszeichen….

    Gruß Jürgen

    • Hallo Jurgen, lieben Dank für die Rückmeldung. Ich habe das mit den Anführungsstrichen im Artikel untergebracht.
      Super das es jetzt funktioniert und vielen Dank für die Anregung 🙂
      LG John

  11. Hallo John,

    vielen Dank für Deine Arbeit und die ausführlichen Erklärungen.
    Deine Seite hat mir sehr geholfen.
    Gruß, Markus

  12. Hallo John Doe,

    ich habe noch ein kleines Problem gefunden.
    Der Text „FEHLER: Es wurden keine Dateien mit den angegebenen Kriterien gefunden.“ wird immer ausgegeben, auch wenn der Fehl Dateien gelöscht hat.

    forfiles /P „D:\Sicherungen\YARCGUI\Logs“ /M *.txt /S /D -7 /C „cmd /c del @File“ 2>&1 | find /v /i „FEHLER: Es wurden keine Dateien mit den angegebenen Kriterien gefunden.“

    Gruß Juergen

  13. Hallo John,

    ich möchte mal zur Kontrolle wissen, welche Dateien eigentlich -kopiert -gelöscht wurden.
    In meinem Protokoll steht das leider nicht drin.

    Insgesamt KopiertÜbersprungenKeine Übereinstimmung FEHLER Extras
    Verzeich.: 9911 0 9911 0 0 0
    Dateien: 43280 15 43265 0 0 0

    Wenn ich die Optionen /NDL /NFL /NP weglasse, Protokolliert er ja alles.
    Hast Du eine Idee, wie er nur die kopierten und gelöschten mitprotokolliert?
    Gruß Jürgen

    • Hallo Jürgen,
      da musst du mal mit den einzelnen LOG Parametern „spielen“. Wie sieht denn deine aktuelle Befehlszeile aus?
      /NP würde ich auf jeden Fall drin lassen.
      Guck mal hier:
      /L : List only – don’t copy, timestamp or delete any files.
      /NP : No Progress – don’t display % copied.
      /LOG:file : Output status to LOG file (overwrite existing log).
      /UNILOG:file : Output status to Unicode Log file (overwrite) ##
      /LOG+:file : Output status to LOG file (append to existing log).
      /UNILOG+:file : Output status to Unicode Log file (append) ##
      /TS : Include Source file Time Stamps in the output.
      /FP : Include Full Pathname of files in the output.
      /NS : No Size – don’t log file sizes.
      /NC : No Class – don’t log file classes.
      /NFL : No File List – don’t log file names.
      /NDL : No Directory List – don’t log directory names.
      /TEE : Output to console window, as well as the log file.
      /NJH : No Job Header.
      /NJS : No Job Summary.
      LG John

  14. Hallo Jürgen,
    ich habe versucht, mit robocopy ein ganzes Laufwerk e: (meine eigenen Dateien) zu sichern. Meine Absicht war, bei einer nachfolgenden Sicherung nur neue und geäanderte Dateien zu sichern und gelöschte Dateien auch im Ziellaufwerk zu löschen. Dazu habe ich eine BAT-Datei mit folgendem Inhalt erzeugt:
    robocopy e:\ u:\LW-E-Backup\LW-E /MIR /A-:A /r:2 /w:1 /unilog:robolog.txt
    robocopy machte daraus:
    Quelle : e:\
    Ziel : u:\LW-E-Backup\LW-E\
    Dateien : *.*
    Optionen: *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /A-:A /R:2 /W:1
    Offensichtlich war Kopiervorgang erfolgreich, ich kann die Dateien im Ziellaufwerk jedoch nicht aufrufen, da im Explorer als einziges Verzeichnis u:\lw-e-backup erscheint (mit beachtlicher Grösse, wie unter „Eigenschaften“ angezeigt). Angelegt hatte ich zuvor dieses und ein Unterverzeichnis u:\lw-e-backup\lw-e
    Wenn ich im Win10-explorer über die Suchfunktion im fenster oben rechts einen beliebigen Dateinamen angebe, der im Quelllaufwerk existiert, so wird diese Datei auch gefunden und bei „Eigenschaften“ auch der korrekte Pfad in Laufwerk u angeben.
    Trotzdem kann ich sie (auch im DOS-Fenster) nicht finden. Was habe ich hier falsch gemacht ? Gibt es hier evtl. eine Kollision bei den selbst angegebenen Parametern und den von robocopy generierten ?
    Gruss Günter

    • Habs mittlerweile geschafft, die Ordner/Dateien im Ziellaufwerk aufzurufen. War wohl eine Einstellung in WIN10 „Ordneroptionen“, was ich allerdings nur durch „herumprobieren“ gefunden habe. Warum sich das ausgerechnet nur auf die Ordner im Ziellaufwerk ausgewirkt hat, habe ich nicht herausgefunden.
      Ich glaube, ich muss auch noch einige Parameter in robocopy ändern, da div. Fehlermeldungen kommen mit dem Hinweis „Zugriff verweigert“, wobei es sich um irgendwelche Systemdateien handelt ($receicle.bin und ähnliche), die ich gar nicht sichern will.

      • Hallo Günter, sorry konnte nicht eher antworten. Danke dass du uns das berichtest. Beschäftige dich mal mit den X** Parametern. Damit kannst du eine Menge ausschließen und auf deine Bedürfnisse anpassen. LG John

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.