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

Uma*_*g M 20 robocopy

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

例:

robocopy "\\hq04t2fis202\archive\dr" "\\hq04t3fis202\archive\dr" /mir /xd "\\hq04t3fis202\archive\dr\*\hq04s2dba301"
Run Code Online (Sandbox Code Playgroud)

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

需要帮助和建议是否可行,如果是,那我该怎么办呢.到目前为止,我已经尝试和测试的许多其他交换机一样/xo,/xx但他们没有解决我的目的.此外,/xx除了现在它根本不会删除目的地的任何文件夹,它将无法镜像.

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

Lar*_*ård 26

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

例如这个作品

robocopy c:\test\a c:\test\b /MIR /XD c:\test\a\leavethisdiralone\
Run Code Online (Sandbox Code Playgroud)

  • 当我在/ xd之后有一个相对路径时,目录没有被排除.让它成为绝对的道路纠正了这个问题.谢谢. (6认同)
  • 实际上@Manticore,在XD之后你不必写整个源路径。如果排除文件夹名称,Robocopy 将忽略该文件夹的所有实例。如果您在文件夹结构中的许多位置都有相同的文件夹(例如临时文件夹),则可以使用此功能来获益。 (2认同)
  • 在/ XD中使用相对路径尝试:%cd%\ relative\path\xxx (2认同)
  • 当您在 Windows 中复制用户文件夹时,您可以获得应用程序数据循环。使用 /XJ 来避免这种情况 (2认同)

Cri*_*k3t 9

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

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

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

起始文件夹结构:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt
Run Code Online (Sandbox Code Playgroud)

命令:

robocopy D:\Temp\source D:\Temp\dest /MIR
Run Code Online (Sandbox Code Playgroud)

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

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

新结构:

d:\Temp\source\1.txt
d:\Temp\source\2\2.txt
d:\Temp\source\3\3.txt
Run Code Online (Sandbox Code Playgroud)

命令:

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "D:\Temp\source\3"        
Run Code Online (Sandbox Code Playgroud)

如果我将 /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
Run Code Online (Sandbox Code Playgroud)

如果我运行该命令,它仍然没问题,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\
Run Code Online (Sandbox Code Playgroud)

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

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "D:\Temp\dest\3"
Run Code Online (Sandbox Code Playgroud)

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

                       1    D:\Temp\source\3\
          *EXTRA File                  4        4.txt
100%        New File                   4        3.txt
Run Code Online (Sandbox Code Playgroud)

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

robocopy D:\Temp\source D:\Temp\dest /MIR /XD "d:\Temp\source\3" "D:\Temp\dest\3"
Run Code Online (Sandbox Code Playgroud)

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


psa*_*ton 6

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

robocopy "%SOURCE_PATH%" "%DEST_PATH%" /MIR /XD "%DEST_PATH%"\hq04s2dba301
Run Code Online (Sandbox Code Playgroud)

  • 使用/ E和/ PURGE与使用/ MIR相同 (2认同)

小智 5

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