双方向 robocopy バッチ ファイル

双方向 robocopy バッチ ファイル

私は USB フラッシュ ドライブを持っていますが、その中に X というフォルダーがあり、最新のアクションに応じて、ノートブック上のフォルダー Y と常に同じである必要があります。また、その逆も同様です。たとえば、フォルダー Y で何かを削除すると、(フラッシュ ドライブが差し込まれるとすぐに) フォルダー X でも削除される必要があり、その逆も同様です。X にフォルダーまたはファイルを追加すると、フラッシュ ドライブが差し込まれるとすぐに、Y でも追加される必要があります。

ここで、robocopy を使用して短いバッチ スクリプトを作成しました。

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

ActiveZone Mobile フォルダーはフォルダー X で、ActiveZone はフォルダー Y です。ここで問題となるのは、これが双方向の同期ではないように見えることです。次のことを説明します。

1.) 両方のフォルダとそのサブフォルダおよびファイルは識別されます 2.) フォルダ X に新しいファイル T1 が作成されました 3.) フォルダ Y に新しいファイル T2 が作成されました 4.) スクリプトが実行されました

結果: フォルダー X と Y の両方に T1 と T2 があった代わりに、フォルダー X と Y の両方に T1 のみが含まれるようになりました。

また、(上記の最初のテストの後) フォルダー Y の T1 を削除してスクリプトを実行すると、フォルダー Y に新しい T1 が作成されます。ただし、Y の T1 の削除アクションは、X の T1 の作成よりも古いのではなく、新しいものです。T1 が X から Y にコピーされるのではなく、X でも T1 が削除されるようにしたいのです。

バッチ スクリプトでこれを実行するにはどうすればよいですか?

答え1

ええと、簡単です。古いファイルを除外して、次の 2 つの方法で実行するだけです。

@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

両方の場所にファイルが存在する場合、新しいコピーが保持されるはずです。NTFS/FAT32 のタイムスタンプの違いにより、無効な比較が誤って発生することが多いため、/DST と /FFT を使用します。また、個人的には Thumbs.db、desktop.ini なども除外します。

存在しないファイルを削除する場合は、どちらが「マスター」の場所であるかを決定し、それを 2 行目に置き、/E を /MIR に変更する必要があります。一方にファイルが存在しないのではなく、一方からファイルが削除されたかどうかを知るというアイデアは、robocopy が実行できる範囲を超えた何らかの追跡なしでは不可能だと思います。

関連情報