我有一个 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 中被删除,而不是将 T1 从 X 复制到 Y。
如何使用批处理脚本完成此操作?
答案1
嗯,很简单。只需以两种方式运行,排除旧文件:
@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
如果文件存在于两个位置,则这应该会保留较新的副本。我使用 /DST 和 /FFT,因为否则 NTFS/FAT32 时间戳差异通常会导致错误的无效比较。我个人还排除了 Thumbs.db、desktop.ini 等。
如果要删除不存在的文件,则必须确定哪个是“主”位置,将其放在第二行,然后将 /E 更改为 /MIR。我认为,如果没有某种跟踪,您无法知道文件是否从其中一个位置删除,而不是其中一个位置只是没有另一个位置的文件,而这超出了 robocopy 的功能。