Robocopy 忽略 /xd 目录

Robocopy 忽略 /xd 目录

我正在尝试使用 Robocopy 来创建客户端软件版本,方法是将所有必要的文件从我们的主要存储库中复制出来。我们有多个客户端,每个客户端都需要自己的自定义软件版本。

我有一份针对每个客户端构建的要求列表。我的想法是先复制核心内容(所有客户端使用的二进制文件等),然后根据我为谁构建,利用这些列表复制客户端特定内容。我们已经有类似的东西在使用 xcopy。

显然,我想从客户端构建中排除很多东西,例如源文件、日志文件,当然还有所有客户端特定的东西。我认为通过巧妙地使用/xf/xd开关,我应该能够让它工作。

获取所有需要的信息后,内置以下命令Lua

robocopy "Z:\path\to\source" "../dest"  /e /xf *.cpp *.h *.hpp [[. . .]] *.cxx   /xd Data/Testing Data/Some/Client/Data Data/Other/Client/Data [[ . . .]] Data/More/Directories 

运行它时我得到以下输出:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Tuesday, August 1, 2017 11:15:59 AM
   Source : Z:\path\to\source
     Dest : ../dest

    Files : *.*

Exc Files : *.cpp
        *.h
        *.hpp
        [[. . .]]
        *.cxx

 Exc Dirs : Data/Testing
        Data/Some/Client/Data
        Data/Other/Client/Data
        [[ . . .]]
        Data/More/Directories

  Options : *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30 

------------------------------------------------------------------------------

输出告诉我我的命令格式正确并且 Robocopy 明白我要求它做什么。

问题是它直接忽略Exc dirs列表并复制所有内容。我不想排除整个Data目录,而只想排除其中相关的部分。

如果我使用反斜杠 ( \),则Exc dirs输出将打印为Data\\testing。这可能是我的问题吗?

答案1

robocopy被宣传为的替代品xcopy,但如果它无法完成我想要的一些简单的事情,那么它真的是一个糟糕的替代品。

匹配之后的任何目录名/xd都会被排除。这很合理,而且它的功能与宣传的一样。看起来,只要你给它提供目录名以外的任何内容,它就会搞砸。从互联网上其他人遇到的麻烦来看,我的问题肯定不是那么独特robocopy

我有以下目录:

C:\repo\SomeProject\Data             <- DONT exclude this
C:\repo\SomeOtherProject\Data        <- DONT exclude this
C:\repo\AnotherProject\bar           <- DONT exclude this
C:\repo\Data\foo                     <- Exclude this
C:\repo\Data\bar                     <- Exclude this
C:\repo\Data\baz                     <- DONT exclude this
  • 如果我跟注robocopy,那么/xd Data也会被排除C:\repo\SomeProject\DataC:\repo\SomeOtherProject\Data
  • 如果我robocopy跟注/xd foo bar那么 C:\repo\AnotherProject\bar也会被排除。

我希望能够调用,robocopy以便/xd Data\foo Data\bar只排除foo和。barData

绝对文件路径不起作用,因为代码必须是可移植的,而且我并不想为我的 >100 个排除列表中的每个条目注入绝对路径。这似乎不太合适。

似乎发生的情况是,如果我使用,/xd Data\bar那么 robocopy 会将其解释为Data\\bar无法找到的。我不知道为什么将单个\更改为,并且或\\的任何排列也不起作用。\/

解决方案

所以最终我的问题的答案是使用xcopy。我给它一个包含诸如*.cpp、、、 \8.vcxproj等条目的列表,以及 100 个其他条目,它似乎工作得很好,排除了所有我不想要的东西\Data\foo\\Data\bar同时保留了我需要的东西。

相关内容