如何使用dir命令仅显示没有扩展名的文件名

Jer*_*ley 9 windows batch-file command-prompt

我试图列出不包括扩展名的文件名,

我想要它的方式:

File1
File2
File3
Run Code Online (Sandbox Code Playgroud)

目前情况:

File1.txt
File2.txt
File3.txt
Run Code Online (Sandbox Code Playgroud)

我尝试使用

File1
File2
File3
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我在批处理文件和命令提示符中都尝试过。

我使用了正确的命令吗?

Eur*_*eka 7

使用 FOR 和 ECHO 来实现这一点

例如,假设扩展名总是.txt

for %f  in ("*.txt") do @echo %~nf
Run Code Online (Sandbox Code Playgroud)

我们没有使用 DIR,而是使用 FOR 命令遍历列表并将每个列表发送到 ECHO,将“~n”选项插入到 %f 中,以导致不显示扩展名。

另一种选择是

FORFILES /c "cmd /c echo @fname"
Run Code Online (Sandbox Code Playgroud)

但是,有了这个,我会在每个输出文件名周围加上引号,这不是您想要的。

如果在批处理文件中运行,则需要将变量的 % 加倍

for %%f in ("*.txt") do @echo %%~nf
Run Code Online (Sandbox Code Playgroud)

如果您需要处理多个文件扩展名

只要目录不包含任何名称带有扩展名的子目录,您就可以概括*.txt*.*

for %f in ("*.*") do @echo %~nf
Run Code Online (Sandbox Code Playgroud)

如果您可能有一些没有扩展名的文件

如果文件有扩展名但之前没有任何扩展名,例如.gitignore,生成的空ECHO命令将输出一条无意义的消息,例如为ECHO is on. 避免这种情况,您可以ECHO is使用FIND命令和/V选项过滤掉包含, 的行:

for %f in ("*.*") do @echo %~nf | find /v "ECHO is"
Run Code Online (Sandbox Code Playgroud)

当然,如果您的本地语言导致 DOS 输出其他内容,ECHO is则此过滤将不起作用。它会错过文件名中恰好包含的任何文件ECHO is

结论

这种疯狂,但这是我们为使用批处理语言而不是任何其他语言(根本!)付出的痛苦代价。我就像一个酒鬼,向所有人承诺我永远不会再写一行 Batch 代码,然后发现自己又回来这样做了,害羞地。

  • 这并没有实现 OP 想要的:它将跳过隐藏文件和系统文件(关于第一种方式),第二种方式也会找到目录。第三种方法不起作用,因为它应该是`%%f`。 (2认同)