使用 robocopy 进行通配符目录排除——奇怪的情况

使用 robocopy 进行通配符目录排除——奇怪的情况

我需要让 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^\*

有任何想法吗?

答案1

事实证明 /XD 匹配的是目录名称——而不是完整路径。因此您实际上不必担心匹配反斜杠。

因此,为了排除名为“bar”的目录(路径中的任何位置),可以使用一个简单的/XD 栏会起作用。如果你通缉为了排除“barf”,您可以使用/XD bar*。

有时答案比你想象的要简单。

答案2

导致失败的部分原因是在引用目录时在 Robocopy 中使用尾随 \ - 这是不行的 - 因为 Robocopy 会尝试将其解释为转义字符。几乎每个人都在使用 Robocopy 时以某种方式犯了这个错误。考虑到这一点,这个例子就可以起作用:

/XD "\Bar"

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

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

答案3

如果您尝试不同的目录过滤器,请确保在更改之间清除目标文件夹!

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

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

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

答案4

很抱歉,但根据https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy

/xf <FileName>[ ...] 排除与指定名称或路径匹配的文件。请注意,FileName 可以包含通配符 (* 和 ?)。/
xd <Directory>[ ...] 排除与指定名称和路径匹配的目录。

所以这具体意味着通配符可以在 /xf 标志中使用,但不能在 /xd 标志中使用。

相关内容