带有robocopy的通配符目录排除-奇怪的情况


16

我需要使用robocopy来排除其路径包含具有特定名称的目录的任何文件。例如,“ bar”:

c:\foo\bar\a.txt
c:\bar\c.txt
d:\baz\bar\flub\d.txt

应该排除在外,但不能

c:\foo\barf\b.txt

这是我尝试过的事情-每一件事都被robocopy拒绝了:

/XD \bar\
/XD *\bar\*
/XD *^\bar^\*

有任何想法吗?

Answers:


18

列出目录名称上的/ XD匹配项-而不是完整路径。因此,您实际上不必担心匹配反斜杠。

因此,要排除称为“ bar”的目录(在路径中的任何位置),一个简单的/ XD bar将起作用。如果您也排除“ barf”,则可以使用/ XD bar *。

有时答案比您想像的要简单。


4

失败的部分原因是在Robocopy引用目录时使用尾随\,这是一个禁止操作,因为Robocopy试图将其解释为转义字符。Robocopy几乎每个人都会以一种或另一种方式犯此错误。考虑到这一点,此示例将起作用:

/XD "\Bar"

如果要匹配更特定的文件夹结构(以免匹配其他子文件夹,则可以添加更多详细信息,例如:

/XD "\Foo\Bar"
/XD "C:\Foo\Bar"

2
通配符排除无效。如果尝试,Robocopy将引发错误。您是否测试了示例?
user1751825 '16

我确实使用过它,除了我在示例中错误地添加了一个星号这一事实外,我认为我将/ XF开关的语法混淆了。我已更正我的答复。谢谢。
米歇尔·埃斯皮诺拉'16

1

如果您尝试使用其他目录过滤器,请确保在更改之间清除目标文件夹!

对我来说,一个陷阱是我没有意识到忽略目录开关也适用于目标文件夹。我使用robocopy /MIR并更改了源目录,并且按预期更新了我的目标目录。然后我发现我有不需要的存档文件夹,所以我添加了/XD archive,但是我的目标文件夹中仍然有存档文件夹!

在弄乱了通配符并包含/排除了\s之后,我终于尝试删除目标文件夹并重新运行脚本-这次它没有存档文件夹!这是我正在运行的命令,更改了目录名称以保护无辜的人:

robocopy \\SERVER\Some\Folder\Path .\Some\Relative\Path /Copy:DAT /Mir /R:0 /W:1 /XD archive*

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.