我需要使用robocopy来排除其path包含具有特定名称的目录的任何文件。 例如,“酒吧”:
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^\*
有任何想法吗?
打开目录名称上的/ XD匹配项 – 不是完整path。 所以你实际上不必担心匹配反斜杠。
所以要排除名为“bar”的目录(在path的任何地方),一个简单的/ XD栏将起作用。 如果你想排除“barf”,你可以使用/ XD bar *。
有时答案比你想象的要简单。
部分失败是在引用一个目录的时候在Robocopy中使用一个尾随的\,这是一个禁忌 – Robocopy试图把它解释为一个转义字符。 Robocopy几乎每个人都以这种或那种方式犯这个错误。 考虑到这一点,这个例子将工作:
/XD "\Bar"
如果您想匹配更具体的文件夹结构(以便不匹配其他子文件夹,则可以添加更多详细信息,如:
/XD "\Foo\Bar" /XD "C:\Foo\Bar"
如果您尝试不同的目录filter,请务必在更改之间清除目标文件夹!
对我来说,是我没有意识到忽略目录开关也适用于目标文件夹。 我用/MIR
运行了robocopy,并更改了源目录,并按预期更新了目标目录。 然后我注意到我有我不想要的存档文件夹,所以我添加了/XD archive
,但我的目标文件夹中仍然有存档文件夹!
在弄乱了通配符并且包括/不包括\
s之后,我终于尝试删除目标文件夹并重新运行脚本 – 这次它没有存档文件夹! 这里是我正在运行的命令,改变目录名称以保护无辜者:
robocopy \\SERVER\Some\Folder\Path .\Some\Relative\Path /Copy:DAT /Mir /R:0 /W:1 /XD archive*