命令提示符中是否有数字通配符?
例如,
dir *.1*
将列出扩展名以 1 开头的所有文件。
答案1
不,MS-DOS 仅支持两个通配符(基于 CP/M)。它们是“*”,表示任意字符序列,以及“?”,表示单个字符。通配符中没有字母和数字的区别,也不支持使用正则表达式将通配符限制为数字。
答案2
你的答案文字问题是“不” - 但如果你真正的问题是:
我是否可以在 cmd 下以某种方式仅选择名称中包含数字的文件?
那么如果它是基于 nt 的(更具体地说W2k加) 是的,可以做到。诀窍是使用findstr
支持简单正则表达式的 来过滤结果。
dir /b |findstr /r "\.[0-9]"
将为您提供与dir
示例中类似的结果。这意味着它也会返回file.1st.second
(就像 dir 一样)。
这里的小问题是它只会列出文件名,但即使这样也可以解决:
for /f %F in ('dir /b ^|findstr /r "\.[0-9]"') do @echo %~ftzaF
将以格式良好的样式打印您的列表dir
。注意它必须在当前目录中运行!
或者(我会推荐)
如果你有powershell
可用(或者你愿意安装它)启动它并执行:
gi .\* |? {$_.name -match "\.[0-9]"}
已编辑根据OP评论:
这将使用以下方法枚举文件for /r
:
最简单,但非常慢(实际上除了少数文件外无法使用),因为它对findstr
每一行运行:
for /r "c:\temp" %F in (*) do @echo %~nxF | findstr /r "\.[0-9]" && echo %F
更复杂,但速度更快(使用专门准备的字符串允许管道传输到单个实例findstr
:
for /f "tokens=2 delims=* eol=*" %F in ('^(for /r "directory_root" %F in ^(*^) do @echo %~nxF*%~dpnxF^) ^|findstr /r "\.[0-9].*\*"') do @echo %F
或(功能相同,但更易于阅读:>)
(for /r "directory_root" %F in (*) do @echo %~nxF*%~dpnxF) | for /f "tokens=2 delims=* eol=*" %F in ('findstr /r "\.[0-9].*\*"') do @echo %F
所有示例都直接从命令行运行