Назад | Перейти на главную страницу

Как исключить файлы в папке с шаблоном с помощью robocopy?

Я хочу исключить все совпадающие файлы C:\dir1\*.ext поэтому я говорю:

robocopy C:\dir1 C:\dir2 /E /B /MIR /xf C:\dir1\*.ext

Согласно документация это должно работать:

/xf <FileName>[ ...]

Исключает файлы, соответствующие указанным именам или путям. Обратите внимание, что имя файла может включать подстановочные знаки (* и?).

Но это приводит к:

ОШИБКА: недопустимый параметр №16: "xyz"

Как я могу исключить на основе этого шаблона? Исключение по каталогу или шаблону имени файла недостаточно.

Я думаю, вам не хватает подпапки, например:

robocopy C:\dir1 C:\dir2 /E /B /MIR /xf C:\dir1\subdir\*.ext

В противном случае это должно сработать:

robocopy C:\dir1 C:\dir2 /E /B /MIR /xf *.ext

По моему опыту, /xf можно использовать подстановочный знак только для имен, а не для путей. Я не думаю, что это возможно.

В качестве обходного пути вы можете запустить robocopy дважды:

robocopy C:\dir1 C:\dir2 /E /B /MIR /xd C:\dir1\subdir\
robocopy C:\dir1\subdir C:\dir2\subdir /E /B /MIR /xf *.ext

Вы можете узнать больше о Робокопия синтаксис:

set _src="C:\dir1"
set _dst="C:\dir2"
set _option=/E /B /MIR
set _xf="C:\dir1\subdir\*.ext"

robocopy %_src% %_dst% %_option% %_xf%

Согласно документации на https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy:

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

Таким образом, это конкретно означает, что подстановочный знак можно использовать во флаге / xf, но не во флаге / xd.