批处理脚本中用DIR和FINDSTR筛选特定扩展名文件失败求助
解决批处理脚本无法匹配
.tmp文件的问题 我来帮你分析下问题所在,你的命令里的findstr参数写错了,导致所有结果都被过滤掉了,所以没有输出。
问题根源
你原命令中的findstr部分:findstr /e /r c:"*\.tmp" 存在两个关键错误:
- 多余的
c::这里不是指定磁盘路径,而是要匹配字符串内容,c:会被当成匹配规则的一部分,而你的文件路径里不会包含这个内容,直接导致匹配失败。 - 正则表达式错误:在
/r正则模式下,*是量词(表示前面的字符出现0次或多次),而不是通配符。要匹配行尾的.tmp,应该用\.tmp$($表示行尾位置)。
另外还有个小细节:dir /a-d /s /b *.tmp 本身就会只列出后缀为.tmp的文件(Windows的通配符*.tmp会严格匹配文件名最后一个点后的后缀,test.tmpl的后缀是tmpl,不会被这个命令列出),所以你原本不需要额外加findstr过滤——这也是导致你无输出的核心原因:正确的dir结果被错误的findstr完全过滤掉了。
修正后的方案
方案1:去掉多余的findstr(推荐)
直接用dir命令筛选.tmp文件即可,命令如下:
for /f "delims=" %%a in ('dir /a-d /s /b *.tmp') do echo "%%a"
运行这个脚本,就会正确输出test.tmp的完整路径,不会包含test.tmpl。
方案2:修正findstr参数(如果需要更复杂的匹配)
如果你的实际场景需要用findstr做进一步过滤,修正后的命令如下:
for /f "delims=" %%a in ('dir /a-d /s /b *.tmp ^| findstr /e /r "\.tmp$"') do echo "%%a"
或者不用正则模式,直接用/e匹配行尾:
for /f "delims=" %%a in ('dir /a-d /s /b *.tmp ^| findstr /e ".tmp"') do echo "%%a"
这两种方案都能帮你得到想要的结果,优先推荐方案1,更简洁高效。
内容的提问来源于stack exchange,提问作者Bob Vandevliet
相关产品推荐
相关产品推荐

