Виключення каталогів підстановок за допомогою роботокопії - дивний випадок


17

Мені потрібно отримати робокопію, щоб виключити будь-який файл, шлях якого містить каталог із певним іменем. Наприклад, "бар":

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^\*

Будь-які ідеї?

Відповіді:


19

Виявляється відповідність / XD у назві каталогу - не повний шлях. Тож вам насправді не потрібно турбуватися про відповідність косої риски.

Тож для виключення каталогів (у будь-якій точці шляху) під назвою "бар" працюватиме простий / XD-бар . Якщо ви хочете виключити "barf", ви також можете використовувати / XD bar *.

Іноді відповідь простіша, ніж ти думаєш.


4

Частина відмови полягає у використанні замикання \ у Robocopy при посиланні на каталог - який є ні-ні -, оскільки Robocopy намагається інтерпретувати його як символ втечі. Майже всі роблять цю помилку так чи інакше за допомогою Robocopy. Зважаючи на це, цей приклад спрацює:

/XD "\Bar"

Якщо ви хочете відповідати більш конкретній структурі папок (щоб не збігатися з іншими папками, ви можете додати більше деталей, наприклад:

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

2
Виключення підстановок не працюють. Робокопія видасть помилку, якщо ви спробуєте. Ви перевіряли свої приклади?
користувач1751825

Я це і використовую, за винятком того, що я помилково додав зірочку до свого прикладу, для якого я думаю, що я плутаю синтаксис із перемикачем / XF. Я виправив свою відповідь. Спасибі.
Міхеал Еспінола

1

Якщо ви пробуєте різні фільтри каталогів, переконайтесь, що очищайте папку призначення між змінами!

Для мене було те, що я не розумів, що перемикач каталогів ігнорування застосовується і до папок призначення. Я запустив роботокопію із /MIRта змінив вихідний каталог, і мій каталог призначення оновився, як очікувалося. Потім я помітив, що у мене є папки архіву, які я не хотів, тому я додав /XD archive, але в моїй папці призначення все ще були папки архіву!

Після возитися з підстановкою та включати / виключати \s, я нарешті спробував видалити цільову папку та повторно запустив скрипт - цього разу у неї не було папок архіву! Ось команда, яку я виконував, із назвами каталогів змінено для захисту невинних:

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

0

Вибачте, але згідно з документацією на веб- сайті https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy :

/ xf <FileName> [...] Виключає файли, які відповідають вказаним іменам або шляхам. Зауважте, що FileName може містити символи підстановки (* і?).
/ xd <Directory> [...] Виключає каталоги, які відповідають вказаним іменам та шляхам.

Отже, це конкретно означає, що підстановку можна використовувати у прапорці / xf, але не у прапорці / xd.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.