Windows 批处理(.bat)文件中,搜索文件时使用的通配符
在Windows批处理(.bat)文件中,搜索文件时使用的通配符及其优先级规则如下:
常用通配符
-
*
(星号)- 匹配任意数量的任意字符(包括0个)
- 示例:
*.txt
匹配所有txt文件;file*
匹配所有以"file"开头的文件;*data*
匹配文件名中包含"data"的文件
-
?
(问号)- 匹配单个任意字符
- 示例:
file?.docx
匹配"file1.docx"、“fileA.docx”,但不匹配"file12.docx"(因为多了一个字符)
通配符匹配优先级
当多个通配符模式同时存在时,匹配规则遵循以下优先级:
-
精确匹配优先于通配符匹配
- 例如:
file.txt
会优先匹配同名文件,而不会被*.txt
抢先匹配
- 例如:
-
?
比*
具有更高优先级- 更具体的模式优先匹配
- 示例:
file?.txt
会比file*.txt
优先匹配"file1.txt"
-
短模式优先于长模式
- 当两个模式长度不同时,较短的模式优先
- 示例:
*.txt
比a*.txt
匹配范围更广,但更具体的a*.txt
会优先匹配符合条件的文件
-
字母顺序影响
- 相同复杂度的模式按字母顺序匹配
- 示例:
a*.txt
比b*.txt
优先匹配
批处理中使用通配符的注意事项
-
在
for
循环中使用时,通配符匹配结果会按字母顺序返回:: 会按字母顺序处理所有txt文件 for %%f in (*.txt) do echo %%f
-
路径中使用通配符时,
*
不能跨越目录分隔符\
- 正确:
C:\data\*.txt
(匹配data目录下的txt文件) - 错误:
C:\*data\file.txt
(无法跨目录匹配)
- 正确:
-
结合
/r
参数递归搜索时,*
和?
仅作用于文件名,不影响目录搜索:: 递归搜索所有子目录中的docx文件 for /r %%f in (*.docx) do echo %%f
理解这些通配符规则可以帮助你更精准地筛选文件,避免意外匹配不需要的文件。在编写批处理脚本时,建议先测试通配符模式是否能准确匹配目标文件。