You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows中用BAT/PowerShell查找带通配符子目录中的文件

解决Windows BAT中查找带通配符目录下的指定文件问题

你遇到的问题确实是FOR /R的一个限制——它的起始路径参数不支持通配符。不过我们可以通过嵌套两层FOR循环来绕开这个限制,先枚举所有匹配目录,再在每个目录里递归查找文件。

命令行直接执行版本

如果你是在CMD窗口里直接敲命令,用这个:

FOR /D %d IN (ba*) DO FOR /R "%d" %f IN (foo*) DO @echo %~dpnf

批处理文件版本

如果是写在.bat或.cmd文件里,要把变量引用改成%%(批处理里需要转义百分号):

@echo off
:: 关闭命令本身的回显,只显示结果
FOR /D %%d IN (ba*) DO (
    :: 遍历所有匹配ba*的一级子目录
    FOR /R "%%d" %%f IN (foo*) DO (
        :: 在每个目录下递归查找匹配foo*的文件,输出完整路径
        echo %%~dpnf
    )
)

关键细节解释

  • FOR /D %d IN (ba*):专门用来枚举当前目录下所有匹配ba*的一级子目录,这一步解决了目录通配符的问题。
  • FOR /R "%d" %f IN (foo*):对每个找到的目录%d,递归遍历其下所有子目录,查找匹配foo*的文件。把%d用引号括起来,是为了兼容带空格的目录名。
  • %~dpnf:这是变量扩展语法,用来获取文件的完整路径+文件名+扩展名。如果你只需要文件所在的路径,可以换成%~dpf;如果只需要相对路径,用%~pf就行。

额外提示

  • 如果ba*没有匹配到任何目录,FOR /D会直接跳过内层循环,不会抛出错误,脚本可以正常结束。
  • 要是你要找的是精确文件名(比如foo.txt),直接把foo*换成foo.txt即可。

内容的提问来源于stack exchange,提问作者umläute

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:18:20