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-ID: 103472

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

Ausgedruckt am: 23.11.2024 um 05:11 Uhr

miniversum
miniversum 07.12.2008 um 10:22:57 Uhr
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.
bastla
bastla 07.12.2008 um 11:41:17 Uhr
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
A66neu
A66neu 06.01.2010 um 14:50:55 Uhr
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???
bastla
bastla 06.01.2010 um 15:14:47 Uhr
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
A66neu
A66neu 08.01.2010 um 12:22:49 Uhr
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
A66neu
A66neu 21.01.2010, aktualisiert am 18.10.2012 um 18:40:55 Uhr
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!!!
Pyradur
Pyradur 01.05.2017 um 19:12:32 Uhr
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/