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\X
和 F:\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\DriveF
和 G:\ServerFolders\DriveG
的摘要内容。
我有多个驱动器,我想用 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\X
和 F:\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\DriveF
和 G:\ServerFolders\DriveG
的摘要内容。