批处理文件中的通配符未按预期工作
Posted
技术标签:
【中文标题】批处理文件中的通配符未按预期工作【英文标题】:Wildcard in batch file not working as anticipated 【发布时间】:2020-12-17 18:44:48 【问题描述】:我有一堆以下列模式命名的文件 FILENAME0.ext FILENAME1.ext FILENAME2.ext FILENAME3.ext FILENAME4.ext,我正在尝试复制具有特定编号的文件文件名的末尾到不同的文件夹。
所以我举例:
xcopy "C:\testfolder\*1.ext" "C:\testfolder\folder1"
但由于某种原因,它不仅会复制以 1 结尾的文件,还会复制其他一些文件(有点不一致)。 奇怪的是 - 它确实适用于文件名以 0 结尾的文件。 看来我对 * 通配符有什么不明白的地方?或者也许有更好的方法来完成这项任务?
【问题讨论】:
dir /x "C:\testfolder\*1.ext"
显示什么?
嗯,谢谢。带有 /x 的 dir 显示文件名以 1 结尾但也以短文件名(8.3 文件名)结尾的文件。我不知道文件可以有两个文件名。我还找到了一个解决方案 - 过滤掉短文件名:for %%A in (C:\testfolder\*1.ext) do @echo %%A | >nul findstr 1.ext && xcopy "%%A" "C:\testfolder\folder1"
【参考方案1】:
您可以使用where.exe
,它会忽略 8.3 名称:
@For /F Delims^= %%G In ('"(Set PATHEXT=) & "%__AppDir__%where.exe" "C:\testfolder":"*1.ext" 2> NUL"') Do @"%__AppDir__%xcopy.exe" "%%G" "C:\testfolder\folder1\" /QHRKY 1> NUL
【讨论】:
以上是关于批处理文件中的通配符未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章