Мне нужно получить robocopy, чтобы исключить любой файл, путь которого содержит каталог с конкретным именем. Например, «бар»:
c:\foo\bar\a.txt
c:\bar\c.txt
d:\baz\bar\flub\d.txt
следует исключить, но не
c:\foo\barf\b.txt
Вот то, что я попробовал - каждая из которых была отвергнута робокопией:
/XD \bar\
/XD *\bar\*
/XD *^\bar^\*
Есть идеи?
Если вы пытаетесь использовать разные фильтры каталогов, не забудьте очистить папку назначения между изменениями!
Гвоздь для меня заключался в том, что я не осознавал, что переключатель игнорирования каталога также применяется к папкам назначения. Я запустил robocopy
/MIR
и изменил исходный каталог, а мой целевой каталог обновился, как и ожидалось. Затем я заметил, что у меня есть архивные папки, которые мне не нужны, поэтому я добавил/XD archive
, но в моей папке назначения все еще были архивные папки!После работы с подстановочными знаками, включая / исключая
\
s, я наконец попытался удалить папку назначения и повторно запустить скрипт - на этот раз у него не было папок архива! Вот команда, которую я выполнял, с изменением имен каталогов, чтобы защитить невинных:источник
Извините, но в соответствии с документацией на https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy :
Так что это, в частности, означает, что подстановочный знак может использоваться во флаге / xf, но не во флаге / xd.
источник