Robocopy:使用/mir 总结两个作业

Robocopy: Use /mir to summarize two jobs

我有多个驱动器,我想用 robocopy 同步到另一个驱动器。结构如下:

E:\
 - ServerFolders
 -- A
 -- B

F:\
 - ServerFolders
 -- C
 -- D

这是我使用的命令:

robocopy E: G: /e /zb /np /copy:DAT /dcopy:T /r:2 /w:5 /mir /log+:"C:\Users\Administrator\Desktop\logs\backup_%date%.log" /XD "System Volume Information" "Recycler"
robocopy F: G: /e /zb /np /copy:DAT /dcopy:T /r:2 /w:5 /mir /log+:"C:\Users\Administrator\Desktop\logs\backup_%date%.log" /XD "System Volume Information" "Recycler"

如您所见,我进行了两次调用并希望保留所有时间戳。如果从 E:F: 中删除了某些内容,它也应该在 G: 上删除。

现在的结果是,如果备份完成,E: 中的所有内容将不再可用。我认为这是因为 /mir,它会删除不再存在的文件夹。我想要的是以下内容:

G:\
 - ServerFolders
 -- A
 -- B
 -- C
 -- D

为此我需要更改什么?如果我指定子文件夹 ServerFolders 也会出现同样的问题。此外,每次添加新文件夹时我都必须更改脚本。

编辑:

我唯一想到的是对每个文件夹执行此操作:

set source1=%fromHDD1%\ServerFolders\A
set source2=%fromHDD1%\ServerFolders\B
set source3=%fromHDD2%\ServerFolders\C
set target1=%to%\ServerFolders\A
set target2=%to%\ServerFolders\B
set target3=%to%\ServerFolders\C

robocopy %source1% %target1% /e /zb /np /copy:DAT /dcopy:T /r:2 /w:5 /mir /XD "System Volume Information" "Recycler"
robocopy %source2% %target2% /e /zb /np /copy:DAT /dcopy:T /r:2 /w:5 /mir /XD "System Volume Information" "Recycler"
robocopy %source3% %target3% /e /zb /np /copy:DAT /dcopy:T /r:2 /w:5 /mir /XD "System Volume Information" "Recycler"

没有更简单的方法吗?

Is there no easier way?

TL;DR:不,没有。

Robocopy 无法自行将两个源驱动器的内容汇总到一个目标文件夹中,并且仍然继续将每个子文件夹镜像回其原始源驱动器。

要做到这一点,Robocopy 必须在其他地方保留子文件夹到源驱动器的映射,而它没有这样的功能。因此,您必须为 Robocopy 维护该映射,这是您在编辑中建议的。

顺便说一句,如果 Robocopy 假设有这样的功能,如果相同的子文件夹名称(但内容不同)出现在两个源驱动器上,您会期望它做什么? (例如,同时存在 E:\ServerFolders\XF:\ServerFolders\X。)

如果您可以放宽汇总规则,显而易见的替代方法是在 G: 上为每个源驱动器创建子文件夹。例如。使用目的地 G:\ServerFolders\DriveF\A, B, ...G:\ServerFolders\DriveG\C, D, ....

因此,您可以考虑通过为每个子目录创建一个 library if you're on a Windows version that supports them. Or you could get the same effect by creating and maintaining a directory with links 来呈现 G:\ServerFolders\DriveFG:\ServerFolders\DriveG 的摘要内容。