Zweiwege-Robocopy-Batchdatei

Zweiwege-Robocopy-Batchdatei

Ich habe einen USB-Stick, auf dem ich einen Ordner namens X habe, der je nach den letzten Aktionen immer wie Ordner Y auf meinem Notebook sein muss und umgekehrt. Wenn ich beispielsweise etwas in Ordner Y lösche, muss es auch in Ordner X gelöscht werden (sobald der Stick eingesteckt wird) und umgekehrt. Wenn ich einen Ordner oder eine Datei in X hinzufüge, muss es auch in Y hinzugefügt werden, sobald der Stick eingesteckt wird.

Jetzt habe ich mit Robocopy ein kurzes Batch-Skript erstellt:

@echo off
robocopy "D:\AC ActiveZone Mobile" "C:\AC ActiveZone" /MIR
PAUSE

Der ActiveZone Mobile-Ordner ist unser Ordner X und die ActiveZone ist unser Ordner Y. Das Problem ist nun, dass dies anscheinend keine bidirektionale Synchronisierung ist. Ich werde das demonstrieren:

1.) Beide Ordner und deren Unterordner und Dateien sind identisch. 2.) Neue Datei T1 im Ordner X erstellt. 3.) Neue Datei T2 im Ordner Y erstellt. 4.) Skript ausgeführt.

Ergebnis: Anstatt T1 und T2 in beiden Ordnern X und Y zu haben, habe ich jetzt nur T1 in beiden Ordnern X und Y.

Außerdem (nach dem ersten Test oben), wenn ich T1 im Ordner Y lösche und das Skript ausführe, erhalte ich nur ein neues T1 im Ordner Y. Aber die Löschaktion von T1 in Y ist nicht älter, sondern neuer als die Erstellung von T1 in X. Ich möchte, dass T1 auch in X gelöscht wird, anstatt dass T1 von X nach Y kopiert wird.

Wie lässt sich dies mit einem Batch-Skript erledigen?

Antwort1

Ähm, ganz einfach. Führen Sie es einfach auf zwei Arten aus und schließen Sie dabei ältere Dateien aus:

@ECHO OFF
ECHO Two way mirror between %1 and %2, continue?
PAUSE
robocopy %2 %1 /E /DST /FFT /XO /XJ
robocopy %1 %2 /E /DST /FFT /XO /XJ

Dadurch sollte die neuere Kopie erhalten bleiben, wenn die Datei an beiden Orten vorhanden ist. Ich verwende /DST und /FFT, da Zeitstempelunterschiede bei NTFS/FAT32 sonst häufig zu falschen, ungültigen Vergleichen führen. Ich persönlich schließe auch Thumbs.db, desktop.ini usw. aus.

Wenn Sie nicht vorhandene Dateien löschen möchten, müssen Sie entscheiden, welches der „Master“-Speicherort ist, ihn in die zweite Zeile setzen und stattdessen /E in /MIR ändern. Ich denke, Ihre Idee, zu wissen, ob eine Datei von dem einen oder dem anderen gelöscht wurde, anstatt dass einer einfach eine Datei nicht hat, die der andere hat, ist ohne eine Art Nachverfolgung unmöglich, die über das hinausgeht, was Robocopy leisten kann.

verwandte Informationen