26

有一个脚本正在运行,它将一堆文件夹从一个卷镜像到另一个卷。问题是现在在目的地的那些文件夹中会有子目录,它们不是原始镜像脚本的一部分。它们是独立的子目录,一旦镜像启动,我不希望它们被清除。我有没有办法/xd在 robocopy 中使用开关,我可以在其中排除目标子目录。

例子:

robocopy "\\hq04t2fis202\archive\dr" "\\hq04t3fis202\archive\dr" /mir /xd "\\hq04t3fis202\archive\dr\*\hq04s2dba301"

在上面的示例中,有几个目录\\hq04t2fis202\archive\dr正在被镜像。在目的地,一旦这些目录从源镜像,就会有另一个脚本转储每个目录中的单独子目录。所以我想要做的是以某种方式使用 /xd 开关来避免在目的地清除这些子目录。此外,在上面的示例中,在/xd交换机中,我使用"*"通配符表示我想包含"\\hq04t3fis202\archive\dr"位于目标根文件夹下的所有目录。

需要有关这是否可行的帮助和建议,如果可行,我该怎么做。到目前为止,我已经尝试并测试了许多其他开关,例如/xo, /xx,但没有一个能解决我的目的。此外,/xx除了现在它根本不会删除目的地的任何文件夹并且它不会镜像之外,它也可以工作。

希望我不会过度混淆这里的每个人。如果您有任何问题,请告诉我。

4

6 回答 6

33

当我尝试使用 /XD 的解决方案时,我发现要排除的路径应该是源路径 - 而不是目标路径。

例如这个作品

robocopy c:\test\a c:\test\b /MIR /XD c:\test\a\leavethisdiralone\
于 2014-08-31T11:25:54.780 回答
7

您可以向 /XD 开关提供完整的目标路径,以保持目标目录不变,而不是在源中创建要排除的空目录

robocopy "%SOURCE_PATH%" "%DEST_PATH%" /MIR /XD "%DEST_PATH%"\hq04s2dba301
于 2014-05-07T15:35:58.260 回答
5

在使用 /mir 时排除目标目录的方法是确保目标目录也存在于源中。我进入我的源驱动器并创建了与目标相同名称的空白目录,然后将该目录名称添加到 /xd。它成功地镜像了所有内容,同时排除了源上的目录,从而使目标上的目录保持不变。

于 2014-01-20T04:17:00.230 回答
3

问题是即使我们添加了一个文件夹到跳过列表,如果它不存在,它也会被删除。

解决方案是使用完整路径添加目标文件夹和源文件夹。

根据我的经验,我将尝试解释不同的场景以及下面会发生什么。

起始文件夹结构:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt

命令:

robocopy D:\Temp\source D:\Temp\dest /MIR

这将复制所有丢失的文件和文件夹,并删除源中找不到的所有文件和文件夹

让我们添加一个新文件夹,然后将其添加到命令中以跳过它。

新结构:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt
d:\Temp\source\3\3.txt

命令:

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "D:\Temp\source\3"        

如果我在源文件夹中添加 /XD 并运行命令,这一切似乎都很好,命令不会将其复制过来。

现在将文件夹添加到目标以获取此设置:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt
d:\Temp\source\3\3.txt

d:\Temp\dest\1.txt
d:\Temp\dest\2\2.txt
d:\Temp\dest\3\4.txt

如果我运行命令它仍然很好, 4.txt 停留在那里 3.txt 没有被复制过来。一切皆好。

但是,如果我删除源文件夹“d:\Temp\source\3” ,那么即使它在跳过列表中,目标文件夹和文件也会被删除

                       1    D:\Temp\source\
    *EXTRA Dir        -1    D:\Temp\dest\3\
      *EXTRA File                  4        4.txt
                       1    D:\Temp\source\2\

如果我更改命令以跳过目标文件夹,那么当源中缺少该文件夹时,该文件夹不会被删除。

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "D:\Temp\dest\3"

另一方面,如果文件夹存在并且有文件,它将复制它们并删除它们:

                       1    D:\Temp\source\3\
          *EXTRA File                  4        4.txt
100%        New File                   4        3.txt

为确保始终跳过该文件夹并且即使缺少源文件夹或目标文件夹也不会复制任何文件,我们必须将两者都添加到跳过列表中:

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "d:\Temp\source\3" "D:\Temp\dest\3"

此后,无论源文件夹丢失还是目标文件夹丢失,robocopy 都会保持原样。

于 2019-02-04T10:32:59.703 回答
3

参数顺序似乎很重要......为了排除子目录,我使用了

robocopy \\source\folder C:\destinationfolder /XD * /MIR

...这对我有用(来自 Windows Server 2016 的 Windows 10 副本)

于 2018-03-22T01:33:09.007 回答
0

试试我的方法:

robocopy.exe "Desktop\Test 文件夹 1" "Desktop\Test 文件夹 2" /XD "C:\Users\Steve\Desktop\Test 文件夹 2\XXX 不要触摸" /MIR

必须放在/XD前面/MIR,而在后面直接包含完整的目标源/XD

于 2020-05-09T01:10:53.817 回答