Robocopy / S erstellt leere Ordner

1178
GWild

Okay - Ich versuche zu verhindern, dass Robocopy beim Kopieren leere Ordner erstellt. Die SOURCE-Ordner sind nicht leer. Sie haben aber auch keine neuen Dateien zum Kopieren. Robocopy erstellt sie jedoch am Zielort.

Mein Ziel ist es, eine Kopie von Dateien zu erstellen, die einen Tag alt sind. Aber ich möchte es vermeiden, 11.674 neue Ordner und Einträge im Protokoll anzuzeigen, wenn nur 4 Dateien kopiert wurden ... und die Festplatte nicht täglich mit weiteren 12-KB-Dateien zu verstopfen. Ich mache eine inkrementelle Sicherung von nur 4 bis 50 Dateien.

Ich weiß ziemlich genau, wie Robocopy funktioniert ... und ich bin ziemlich sicher, dass dies von den meisten Designteams eher als ein "Feature" betrachtet wird, als einen "Defekt". Daher ist es meist sinnlos, von MS nachzufragen.

Eine Problemumgehung besteht darin, XCOPY wie folgt zu verwenden, es muss jedoch ein gesetzliches Datum berechnet und formatiert werden:

E:\>xcopy C:\Users\Public\* E:\C_Users\Public\ /D:6-1-2018 /S /B /C /H /J /K /O /Y 

Irgendwelche Ideen oder Vorschläge?

Hier ist ein Beispiel für das Problem. Beachten Sie, dass die erstellte Adobe AppData-Hierarchie leer ist:

------------------------------------------------------------------------------- ROBOCOPY :: Robust File Copy for Windows  -------------------------------------------------------------------------------  Started : Fri Jun 01 03:42:50 2018  Source : C:\Users\Public\ Dest : E:\20180601_Users_C\Public\  Files : *.*  Options : *.* /S /COPY:DATSO /B /NP /XJ /REG /MAXAGE:1 /MT:16 /R:3 /W:1   New Dir 2 C:\Users\Public\.idlerc\ New Dir 0 C:\Users\Public\AppData\ New Dir 4 C:\Users\Public\AppData\Local\ New File 7603 Resmon.ResmonCfg 100%  New Dir 0 C:\Users\Public\AppData\Local\Adobe\ New Dir 0 C:\Users\Public\AppData\Local\Adobe\AAMUpdater\ New Dir 7 C:\Users\Public\AppData\Local\Adobe\AAMUpdater\1.0\ New Dir 1 C:\Users\Public\AppData\Local\Adobe\AAMUpdater\1.0\Data\   [...snip...]  ------------------------------------------------------------------------------  Total Copied Skipped Mismatch FAILED Extras Dirs : 11674 11674 0 0 0 0 Files : 443686 4 443682 0 0 0 Bytes : 1.789 t 53.26 m 1.789 t 0 0 0 Times : 0:00:40 0:00:09 0:00:00 0:00:05  Ended : Fri Jun 01 03:43:09 2018 =========== 
1

2 Antworten auf die Frage

1
Pimp Juice IT

Ein paar Dinge. . .

  1. Es scheint, dass Sie den /MIRParameter anstelle des /SParameters verwenden müssen, um sicherzustellen, dass Verzeichnisse nicht an das Ziel kopiert werden, wenn sie dort bereits vorhanden sind.
    • Wenn Sie den /MIRParameter verwenden, werden leere Verzeichnisse an den Zielspeicherort kopiert. Dies ist der Kompromiss, um sicherzustellen, dass die bereits vorhandenen Verzeichnisse nicht bei jedem Lauf erneut kopiert werden. Es gibt eine einfache Problemumgehung, um die leeren Verzeichnisse am Zielspeicherort schnell zu entfernen. Dies bedeutet, dass Robocopy <dest> <dest> /S /MOVEder Befehl direkt nach der Ausführung des Befehls mit dem /MIRParameter ausgeführt wird.
  2. Wenn Sie Verzeichnisse aus der Robocopy- Ausgabe auslassen möchten, fügen Sie einfach den /NDLParameter hinzu.

Robocopy-Skript

Robocopy "<Source>" "<Destination>" *.* /MIR /COPY:DATSO /B /NP /NDL /XJ /REG /MAXAGE:1 /MT:16 /R:3 /W:1 Robocopy <dest> <dest> /S /MOVE  

Wichtige Notizen:

  • Die Verwendung des /MIRSchalters bedeutet auch, dass Dateien und Ordner im Ziel, die nicht mehr in der Quelle vorhanden sind, aus dem Ziel gelöscht werden

  • Das Kopieren leerer Verzeichnisse pro Skriptlauf im Vergleich zum Kopieren derselben tausend Verzeichnisse pro Ziellaufwerk, die bereits am Ziel vorhanden sind, scheint ein geringer Preis zu sein. Da diese leicht und schnell entfernt werden können, scheint dies ein Kinderspiel zu sein

  • Der Robocopy-Befehl, bei Robocopy <dest> <dest> /S /MOVEdem die leeren Verzeichnisse vom Ziel gelöscht werden, verwendet den Zielspeicherort für BEIDE Quelle und Ziel


Weitere Ressourcen

  • Robocopy
  • Robocopy /?
    • /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE). /MOVE :: MOVE files AND dirs (delete from source after copying). /NDL :: No Directory List - don't log directory names. 
Das, was ich gerne machen würde, ist, wenn RC einen Ordner ohne neue Daten verarbeitet, fahren Sie mit dem nächsten fort. Dabei werden alle leeren Ordner (/ S) übersprungen und dann alle Ordner kopiert, in die sie gelangen, die nicht leer sind. Dadurch wird am Ziel ein vollständiger Baum erstellt. Wenn dies täglich pro Benutzer ausgeführt wird, werden 12.000 x N-Benutzer im Backup-Array abgelegt. GWild vor 5 Jahren 0
Ich werde mir den zweiten RC-Befehl ansehen, um leere Ordner zu löschen. Das funktioniert möglicherweise besser als XCOPY, auch wenn XCOPY den Vorteil hat, dass Junctions etwas besser verarbeitet werden. Mit RC ignorierte ich sie einfach und worauf sie hinwiesen. GWild vor 5 Jahren 1
0
GWild

Ich habe am Ende Folgendes getan (Public durch Ihren Benutzernamen ersetzen):

@echo off @rem - create decent date and filename strings for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b) for /f "tokens=1-2 delims=: " %%a in ('time /t') do (set mytime=%%a%%b) set fname=E:\%mydate%_%mytime%_RClog_d.txt  @rem - copy newer files to a new timestamped tree robocopy C:\Users\Public\ E:\%mydate%_Users_C\Public\ /XJD /ZB /S /COPY:DATSO /R:3 /W:1 /MAXAGE:7 /NC /NDL /FP /LOG:%fname% /NP   @rem - and this removes the empty folders created by the command above robocopy E:\%mydate%_Users_C\Public\ E:\%mydate%_Users_C\Public\ /S /MOVE /NDL /LOG:NUL /NP  

Und das zeigt sich auf der Festplatte:

06/04/2018 01:00 PM 9,644,168 20180604_0241_RClog.txt 06/10/2018 02:34 AM 563,342 20180610_0230_RClog_d.txt 06/10/2018 02:30 AM <DIR> 20180610_Users_C 06/10/2018 02:30 AM <DIR> 20180610_Users_D 06/17/2018 02:30 AM 394,755 20180617_0230_RClog_d.txt 06/17/2018 02:30 AM <DIR> 20180617_Users_C 06/17/2018 02:30 AM <DIR> 20180617_Users_D 06/24/2018 02:30 AM 833,475 20180624_0230_RClog_d.txt 06/24/2018 02:30 AM <DIR> 20180624_Users_C 06/24/2018 02:30 AM <DIR> 20180624_Users_D 07/01/2018 02:31 AM 891,884 20180701_0230_RClog_d.txt 07/01/2018 02:30 AM <DIR> 20180701_Users_C 07/01/2018 02:31 AM <DIR> 20180701_Users_D 09/17/2017 01:09 AM <DIR> Users_C 06/04/2018 12:32 PM <DIR> Users_D