Batch脚本按指定扩展名列举目录文件的通配符失效问题及解决
通配符不生效的原因
Batch 内置的 == 比较符是精确字符串匹配,不会把右侧的*识别为通配符,只会把*.asm当做普通的固定字符串和%~NXI展开的实际文件名做对比,二者显然不可能相等,所以你的第一版代码永远无法触发匹配逻辑。而你把右侧改成固定的r_draw16.asm时是精确匹配,所以可以正常命中。
修复方案
有两种常用的实现方式:
方案1:直接在FOR的匹配规则中使用通配符(推荐)
FOR命令本身原生支持通配符匹配,直接把筛选条件写到遍历集合里即可,性能最高逻辑也最简单:
- 只遍历指定目录下的.asm文件:
:: 遍历当前目录 FOR %I IN (*.asm) DO @ECHO %~I :: 遍历指定目录,比如D:\code目录 FOR %I IN (D:\code\*.asm) DO @ECHO %~I
- 如需同时遍历指定目录下所有子目录中的.asm文件,增加
/R参数即可:
FOR /R "D:\目标目录路径" %I IN (*.asm) DO @ECHO %~I
方案2:在IF中单独判断后缀(适合多筛选条件场景)
如果你需要在遍历所有文件的过程中增加额外判断,可以单独提取文件后缀做精确匹配,加/I参数可以忽略大小写,兼容.ASM大写后缀的文件,加引号可以避免文件名带空格时语法报错:
FOR %I IN (*) DO IF /I "%~xI" == ".asm" @ECHO %~I
注意:如果上述代码是写在
.bat/.cmd脚本文件中运行,需要把所有%I替换为%%I,直接在CMD命令行执行才用单百分号。
内容的提问来源于stack exchange,提问作者darek_911
相关产品推荐
相关产品推荐

