【问题标题】:How to exclude subdirectories in the destination while using /mir /xd switch in robocopy如何在 robocopy 中使用 /mir /xd 开关时排除目标中的子目录
【发布时间】:2013-01-24 21:56:03
【问题描述】:

有一个脚本正在运行,它将一堆文件夹从一个卷镜像到另一个卷。问题是现在在目的地的那些文件夹中将有不属于原始镜像脚本的子目录。它们是独立的子目录,一旦镜像启动,我不希望它们被清除。有没有办法让我在 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 可以工作,只是现在它根本不会删除目标位置的任何文件夹,也不会进行镜像。

希望我不会让这里的每个人都感到困惑。如果您有任何问题,请告诉我。

【问题讨论】:

    标签: robocopy


    【解决方案1】:

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

    例如这个作品

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

    【讨论】:

    • 当我在 /xd 之后有一个相对路径时,该目录没有被排除。使其成为绝对路径可以解决问题。谢谢。
    • 如果我像这样使用 robocopy robocopy mysrc/ mydest/ /MIR /XD logs /XD tomcat/temp, 会怎样 - 指定的目录会被排除,还是我必须在 mysrc/ 文件夹中添加 /XD?
    • 其实@Manticore ,在XD之后你不必写整个源路径。如果您排除文件夹名称,Robocopy 将忽略此文件夹的所有实例。如果您在文件夹结构中的许多位置都有相同的文件夹(例如临时文件夹),则可以使用此功能。
    • 在 /XD 中使用相对路径尝试:%cd%\relative\path\xxx
    • 当您在 Windows 中复制用户文件夹时,您可以获得应用程序数据循环。使用 /XJ 来避免这种情况
    【解决方案2】:

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

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

    【讨论】:

    • 这也可以与其他接受路径参数的开关一起使用,例如 /XF
    • 使用 /E 和 /PURGE 与使用 /MIR 相同
    • /XD [relative_path_to_folder] /MIR 完成这项工作
    • 我发现这不起作用 - 请参阅 Lars Meldgard 的回答。 /XD 需要完整的 路径而不是目标路径。
    【解决方案3】:

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

    【讨论】:

    • 我可以验证这是真的。当您尝试排除嵌套比源中存在的更深几层的特定目录时,这是唯一的解决方案。
    • 添加... 如果目标目录存在,则使用 /XD 中 target 文件夹的完整路径。如果目标目录 存在,则使用 /XD 中 source 文件夹的完整路径。
    • 没有必要创建空白目标输入法。如果从路径中删除尾部斜杠,则可以在源路径上将 XD 与 /MIR 一起使用。例如:robocopy E:\backup C:\backup /MIR /XD "G:\BACKUP\EXCLUDE" 将镜像目录,同时排除 G:\BACKUP\EXCLUDE 文件夹。
    【解决方案4】:

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

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

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

    起始文件夹结构:

    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】:

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

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

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

      【讨论】:

        【解决方案6】:

        试试我的方法:

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

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

        【讨论】:

          猜你喜欢
          • 2012-03-25
          • 1970-01-01
          • 2019-04-04
          • 2014-09-12
          • 1970-01-01
          • 1970-01-01
          • 2011-09-26
          • 2016-02-12
          • 1970-01-01
          相关资源
          最近更新 更多