批处理脚本路径中的通配符

Wildcards in paths for batch scripts

我有一个包含一行的批处理脚本,该脚本将递归地查找目录并将与指定文件名匹配的文件复制到另一个目录:

FOR /R "J:\" %%G in (*FINAL.pdf) DO COPY "%%G" "C:\Users\user\discimport\" /Y

效果很好。但是,最近工作中的文件命名约定发生了变化,文件现在不再方便地以“*FINAL.pdf”结尾。现在需要以“*Sign_Off *.pdf”的形式找到它们。父目录现在将以日期代码下划线结尾,如下所示:“20180426_Final”。我尝试将脚本中的行修改为符合我的非 windows 敏感性的逻辑:

FOR /R "J:\*\*_Final" %%G in (*Sign_Off*.pdf) DO COPY "%%G" "C:\Users\user\discimport\" /Y

但是没有用。我一直在阅读这个并且似乎无法找到一个直接的答案如何用正确的语法格式化它。看来通配符只能用在路径的末尾。有没有办法使用批处理脚本正确格式化它,或者我必须尝试 powershell?

Robocopy 是你的朋友。键入 help robocopy 以获取其全部功能的列表以及应替换 for 循环的以下行的说明:

for /f %%G in ('dir /B /A:D *_Final') do robocopy j:\ "%%G" *Sign_Off*.pdf /MT /S /ZB

/A:D 选项将目录列表限制为仅匹配模式的目录,/B 将输出限制为简单列表。你会发现robocopy比for循环快多了,也更容易使用。