Windows CMD:“dir *.cpp”通配符匹配“main.cpp_”和“main.cpp2”

Windows CMD:“dir *.cpp”通配符匹配“main.cpp_”和“main.cpp2”

以下是目录的内容:

λ 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$"

相关内容