我正在尝试使用 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\Data
C:\repo\SomeOtherProject\Data
- 如果我
robocopy
跟注/xd foo bar
那么C:\repo\AnotherProject\bar
也会被排除。
我希望能够调用,robocopy
以便/xd Data\foo Data\bar
只排除foo
和。bar
Data
绝对文件路径不起作用,因为代码必须是可移植的,而且我并不想为我的 >100 个排除列表中的每个条目注入绝对路径。这似乎不太合适。
似乎发生的情况是,如果我使用,/xd Data\bar
那么 robocopy 会将其解释为Data\\bar
无法找到的。我不知道为什么将单个\
更改为,并且或\\
的任何排列也不起作用。\
/
解决方案
所以最终我的问题的答案是使用xcopy
。我给它一个包含诸如*.cpp
、、、 \8.vcxproj
等条目的列表,以及 100 个其他条目,它似乎工作得很好,排除了所有我不想要的东西\Data\foo\
,\Data\bar
同时保留了我需要的东西。