如何在robocopy中使用/ mir / xd开关时排除目标中的子目录

时间:2013-01-24 21:56:03

标签: robocopy

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

示例:

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

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

需要帮助和建议是否可行,如果是,那我该怎么办呢。到目前为止,我已经尝试并测试过许多其他开关,例如/xo/xx,但它们都没有解决我的目的。 此外,/xx将起作用,但现在它根本不会删除目的地的任何文件夹而且它不会镜像。

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

7 个答案:

答案 0 :(得分:24)

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

e.g。这个作品

robocopy c:\test\a c:\test\b /MIR /XD c:\test\a\leavethisdiralone\

答案 1 :(得分:5)

您可以提供到/ XD开关的完整目标路径,以使目标目录不受影响,而不是在源中创建要排除的空目录

robocopy "%SOURCE_PATH%" "%DEST_PATH%" /MIR /XD "%DEST_PATH%"\hq04s2dba301

答案 2 :(得分:4)

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:0)

问题在于,即使我们添加了要跳过列表的文件夹,如果该文件夹不存在,该文件夹也会被删除。

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

根据经验,我将尝试解释不同的情况以及下面发生的事情。

开始文件夹结构:

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都将其保留原样。

答案 5 :(得分:0)

尝试我的方式:

robocopy.exe“桌面\测试文件夹1”“桌面\测试文件夹2” / XD“ C:\ Users \ Steve \ Desktop \ Test文件夹2 \ XXX请勿触摸” / MIR

必须将/XD放在/MIR之前,而将完整的目标源直接放在/XD之后。

答案 6 :(得分:-4)

在robocopy帮助文件中,/ MIR选项说明如下。

  

/ MIR :: MIRror目录树(相当于/ E plus / PURGE)。

以下是/ E和/ PURGE开关的说明:

  

/ E :: copy子目录,包括空目录。

     

/ PURGE ::删除源文件中不再存在的dest文件/目录。

您可以通过交换" / E"来避免删除这些子目录。 for" / MIR"在你的robocopy命令中。但是,这种解决方案完全关闭了清洗,这似乎不是您想要的结果。在这种情况下,您可能希望继续使用/ XD开关选项。

作为参考,您可能希望将帮助文件推送到文本文档。

Robocopy /? > RobocopySwitches.txt