首页 > 解决方案 > Batch For 循环使用多个问号作为通配符返回不正确的文件

问题描述

我试图让一个批处理脚本遍历文件夹中特定类型的文件名。我不希望它接触超过一定长度或格式的类似名称的文件。每次运行时,脚本都会返回太多与文件名结构不匹配的文件

文件夹中的文件:

ABC_4567.JPG
ABC_DoNotWantThisFileToBeProcessed_NoThanks_4876.JPG

试过1:

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION

for %%f in (ABC_????.JPG) do (
        ECHO Processing file: %%~nxf
    )

试过2:

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION

for %%f in (????????.JPG) do (
        ECHO Processing file: %%~nxf
    )

返回这个:

Processing file: ABC_4567.JPG
Processing file: ABC_DoNotWantThisFileToBeProcessed_NoThanks_4876.JPG

我该如何解决这个问题并只返回长度较短或结构为ABC_####.JPG的文件

谢谢你救了我的头发。

标签: windowsfor-loopbatch-filecmd

解决方案


有一种更简单的方法,那就是使用内置的where.exe实用程序。此实用程序理解?为一个字符,并且它也不包含 8.3 文件名。

此示例将迭代当前目录".",文件名以不区分大小写的字符串开头ABC_,后跟正好四个字符,后跟不区分大小写的扩展名.JPG

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims=" %%G In ('
    "(Set PATHEXT=) & where.exe /F ".":"ABC_????.JPG" 2>NUL"
') Do Echo Processing file: %%G
Pause

如果您打算在您的循环Do部分中使用延迟扩展For,请考虑仅在此处启用它,而不是为整个脚本启用它。


推荐阅读