【问题标题】:Wildcards in paths for batch scripts批处理脚本路径中的通配符
【发布时间】:2018-04-26 18:18:56
【问题描述】:

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

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

效果很好。然而,最近这里的文件命名约定发生了变化,文件现在不再方便地以“*FINAL.pdf”结尾。现在需要以“*Sign_Off *.pdf”的形式找到它们。父目录现在将以 datecode 下划线 final 结尾,如下所示:“20180426_Final”。我尝试将脚本中的行修改为对我的非 Windows 敏感性而言似乎合乎逻辑的内容:

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

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

【问题讨论】:

  • 文件名只能使用通配符。
  • 路径中不需要通配符,/R 会导致递归到所有子目录。
  • 您是否尝试将“工作”脚本中的*FINAL.pdf 替换为*Sign_Off*.pdf,或者您的问题是J: 驱动器上的其他地方会有其他*Sign_Off*.pdf 文件但不在以_Final结尾的目录名
  • 没错。所有目录的文件中都有*Sign_Off*.pdf,但我只需要来自` ********_Final\ `目录的那些。

标签: windows batch-file wildcard


【解决方案1】:

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 循环快得多,也更容易使用。

【讨论】:

  • 太棒了,谢谢。我肯定会使用 robocopy 来减少脚本的其余部分。这将 100% 工作,除非我需要从以“*_Final\”结尾的目录中提取 pdf...所有目录中都有具有相同名称结构的 pdf,但我只需要最终版本。希望我描述得可以理解:)
猜你喜欢
  • 2016-05-22
  • 1970-01-01
  • 2018-02-18
  • 2017-12-06
  • 2019-05-14
  • 1970-01-01
  • 2015-12-13
  • 2017-12-14
  • 1970-01-01
相关资源
最近更新 更多