我想排除所有匹配的文件C:\dir1\*.ext
,所以我说:
robocopy C:\dir1 C:\dir2 /E /B /MIR /xf C:\dir1\*.ext
根据文档这应该有效:
/xf <FileName>[ ...]
排除与指定名称或路径匹配的文件。请注意,FileName 可以包含通配符(* 和 ?)。
但其结果是:
错误:无效参数 #16:“xyz”
我如何根据此模式排除?按目录或按文件名模式排除不够具体。
答案1
我猜你那里缺少一个子文件夹,例如:
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
答案2
根据文档https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy:
/xf <FileName>[ ...] 排除与指定名称或路径匹配的文件。请注意,FileName 可以包含通配符 (* 和 ?)。/
xd <Directory>[ ...] 排除与指定名称和路径匹配的目录。
所以这具体意味着通配符可以在 /xf 标志中使用,但不能在 /xd 标志中使用。
答案3
您可以阅读更多关于机器人复制句法 :
set _src="C:\dir1"
set _dst="C:\dir2"
set _option=/E /B /MIR
set _xf="C:\dir1\subdir\*.ext"
robocopy %_src% %_dst% %_option% %_xf%