以下是目录的内容:
λ dir /b "..\src\"
main.c
main.c_
main.c2
main.cpp
main.cpp_
main.cpp2
这按预期工作:
λ dir /b "..\src\*.c"
main.c
这不:
λ dir /b "..\src\*.cpp"
main.cpp
main.cpp_
main.cpp2
为什么这个通配符匹配主程序集和主程序集2?
有什么可行的解决方案可以仅列出目录中的 *.cpp 文件?
编辑:它不是重复的cmd 有通配符错误?
答案1
因为扩展名长度超过 3 个字符,并且您使用的命令解释器包含大量针对 16 位应用程序的向后兼容代码。如果您在 PowerShell 中运行相同的命令,它将按预期运行。
编辑,因为我无法回复评论
是的,只需运行 powershell.exe,然后发出相同的命令,少一些 /b 标志。
编辑2
据我所知,除非你想编写自己的程序,否则没有解决方案dir
。至于 powershell,开始熟悉它是个好主意,因为我确信微软正在试图淘汰传统的 DOS 解释器。
答案2
虽然确实有点奇怪,但它确实有效作为指定(斜体由我标记):
您可以使用通配符(* 或?)来表示文件名的一个或多个字符并显示文件或子目录的子集。
星号 (*):使用星号代替任意字符串,例如:
dir *.txt 列出当前目录中所有带有以下扩展名的文件首先.txt,例如.txt、.txt1、.txt_old。
dir read*.txt 列出当前目录中所有以“read”开头且扩展名以 .txt 开头的文件,例如 .txt、.txt1 或 .txt_old。
dir read*.* 列出当前目录中所有以“read”开头且具有任意扩展名的文件。
星号通配符始终使用短文件名映射,因此您可能会得到意想不到的结果。
答案3
我找到了一个无需使用 powershell 的解决方案:
λ dir /b "..\src\" | findstr /r /c:".*\.cpp$"