lindsche
Goto Top

robocopy MIR gelöschte dateien in quelle auf ziel verschieben anstatt löschen

Moin zusammen,

benutze nun schon einige Zeit zufrieden robocopy.

nun ist mir bei meinen privaten sicherung das malheur passiert, dass ich daten auf der quelle gelöscht habe, die robocopy nun im /MIR-Mode natürlich auch nach Ausführung auf dem Ziel gelöscht hat.
nunja unfein, da das löschen nicht beabsichtigt war.

frage nun: gibt es eine elegante lösung gelöschte dateien beim lauf auf dem ziel erstmal in einen ordner zu verschieben anstatt sie direkt zu löschen (wenn möglich mit erhalt der ordnerstruktur?)
ich mein da könnte man bestimmt was mit einem script vor ausführung von robocopy machen, das die nicht mehr vorhandenen dateien eben verschiebt.

aber gibt es nicht vielleicht genau so etwas schon oder lässt sich das doch mit robocopy direkt bewerkstelligen?

hab da leider nix gefunden, daher hier die frage.

cheers,
lindsche

Content-Key: 103472

Url: https://administrator.de/contentid/103472

Printed on: April 16, 2024 at 18:04 o'clock

Member: miniversum
miniversum Dec 07, 2008 at 09:22:57 (UTC)
Goto Top
Mal ungetestet so:
FOR /F "tokens=1,2 delims=^>" %%i in ('xcopy /D /L /I /H "%quelle" "%ziel%"') do copy "%%j" "c:\sicherung"  
So werden alle Dateien die gelöscht oder überschrieben werden würden vorher in ein anderen Verzeichnis kopiert.
Member: bastla
bastla Dec 07, 2008 at 10:41:17 (UTC)
Goto Top
Hallo lindsche und willkommen im Forum!

Wenn ich das richtig verstanden habe, dann etwa so:
@echo off & setlocal
set "Quelle=D:\Daten"  
set "Sicherung=X:\Sicherung"  
set "Zwischen=X:\Temp\Zwischen"  

xcopy /t /i /y "%Sicherung%" "%Zwischen%"  
for /f "tokens=3*" %%i in ('robocopy "%Quelle%" "%Sicherung%" /PURGE /S /L /FP^|findstr /c:"\*EXTRA File"') do call :ProcessFile "%%j"  
goto :eof

:ProcessFile
set "Z=%~1"  
call set "Z=%%Z:%Sicherung%=%Zwischen%%%"  
echo move %1 "%Z%"  
goto :eof
Vorweg:
Es sollen alle Dateien aus der Sicherung, die in der Quelle nicht mehr vorhanden sind, in einen "Zwischenspeicher" verschoben werden. Der Speicherort dieses "Zwischenspeichers" darf dabei nicht unterhalb des Sicherungsordners liegen (also im Beispiel oben wäre "X:\Sicherung\Zwischen" nicht möglich).

Kurz zum Ablauf:
Damit die Ordnerstruktur beim Verschieben bereits vorhanden ist ("move" erstellt keine Ordner), diese vorweg mit "xcopy" erstellen.

Dann mit "robocopy" ein "purge" simulieren (durch Verwendung von "/L") und die "*EXTRA Fiiles" in einem Unterprogramm einzeln verschieben lassen.

Damit die Ordnerstruktur erhalten bleibt, im Pfad der zu verschiebenden Datei den derzeitigen Basispfad %Sicherung% durch den neuen Basispfad %Zwischen% ersetzen (so würde also etwa aus "X:\Sicherung\Ordner\Datei.txt" "X:\Temp\Zwischen\Ordner\Datei.txt").

Zum Verschieben ist anzumerken, dass wegen des "echo" vor dem "move" (zum Testen) die Befehle nur angezeigt werden - tatsächlich verschoben wird erst nach dem Entfernen des "echo". Noch zu beachten: Im "Zwischenspeicher" befindliche gleichnamige Dateien werden überschrieben (was mE auch sinnvoll ist).
Obwohl durch den Schalter "/L" sicher gestellt sein sollte, dass keine Dateien gelöscht werden, zunächst nur Testdaten verwenden!
[Edit] Das Ausfiltern der zu verschiebenden Dateien mit "findstr" sollte sich durch die Schalter "/NJH /NJS /NDL" ersetzen lassen - habe ich aber nicht wirklich getestet. [/Edit]

Grüße
bastla
Member: A66neu
A66neu Jan 06, 2010 at 13:50:55 (UTC)
Goto Top
Also ich hab alles genau nach dieser Aleitung gemacht, das Verschieben funktioniert auch für ca. 50 bis 70 Dateien, danach geschieht nichts mehr, d.h. die Dateien werden im Sicherungsordner nicht gelöscht und nicht in den "Verschiebordner" geschoben.

Kann mir bitte jemand helfen???
Member: bastla
bastla Jan 06, 2010 at 14:14:47 (UTC)
Goto Top
Hallo A66neu und willkommen im Forum!

Vorweg: Hier in diesem Thread sind wir vermutlich ziemlich unter uns - es wäre daher vermutlich sinnvoller, eine neue Frage zu erstellen und auf diesen Beitrag hier zu verweisen ...
Der Fehler ist etwas schwer nachvollziehbar - schau Dir doch einmal an, was
robocopy "%Quelle%" "%Sicherung%" /PURGE /S /L /FP|findstr /c:"\*EXTRA File"
als Ergebnis liefert - als Batch könnte das so gehen:
@echo off & setlocal
set "Quelle=D:\Daten"  
set "Sicherung=X:\Sicherung"  
set "Zwischen=X:\Temp\Zwischen"  

robocopy "%Quelle%" "%Sicherung%" /PURGE /S /L /FP|findstr /c:"\*EXTRA File">"%Zwischen%\Dateiliste.txt"  
notepad "%Zwischen%\Dateiliste.txt"  
Es sollten alle Dateien, die in dieser Liste stehen, auch verschoben werden ...

Grüße
bastla
Member: A66neu
A66neu Jan 08, 2010 at 11:22:49 (UTC)
Goto Top
Hallo Bastla,

vielen Dank für Deine sehr schnelle Rückmeldung, war jetzt zwei Tage auf Dienstreise, darum konnte ich mich nicht zurückmelden!

Werde gleich mal einen neuen Artikel schreiben, danke


Grüße A66neu
Member: A66neu
A66neu Jan 21, 2010, updated at Oct 18, 2012 at 16:40:55 (UTC)
Goto Top
Hallo Bastla,

könntest Du mal meinen neuen Thread anschauen, ich habe dort mein Script gepostet, evtl. hast Du ja eine Idee, die Resonanz auf den Beitrag ist auf jeden Fall ganz ganz gering

Robocopy Synchronisation von Daten - gelöschte Daten der Quelle sollen verschoben und nicht gelöscht werden

ich hoffe Du kannst mir weiterhelfen!!!
Member: Pyradur
Pyradur May 01, 2017 at 17:12:32 (UTC)
Goto Top
Ungeachtet des Alters der Fragestellung (und der Fragesteller face-wink

Auf der Suche nach der Lösung die der Fragesteller hatte bin ich auf diesen Thread gestoßen.
Da ich den hier aufgeführten Lösungsansatz aufgrund fehlender Fachkenntnis nicht verstehe/nachvollziehen kann habe ich noch ein wenig gegoogelt und bin auf folgende Lösung gestoßen, die vielleicht auch Anderen nutzt:

Das Programm Personal Backup bietet genau das was "lindsche" und ich gesucht haben:
Die Möglichkeit während einer Datenspiegelung (Backup) die auf dem Ziel eigentlich zu löschenden Dateien zu verschieben, statt sie zu löschen.

http://personal-backup.rathlev-home.de/