Я хочу исключить все совпадающие файлы 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.