首页 > 解决方案 > 如何使用 dir 命令仅显示不带扩展名的文件名

问题描述

我正在尝试列出不包括扩展名的文件名,

我想要它:

File1
File2
File3

目前情况如何:

File1.txt
File2.txt
File3.txt

我尝试使用

@echo off
dir /A:-D /B
pause

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

我使用正确的命令吗?

标签: windowsbatch-filecommand-prompt

解决方案


使用 FOR 和 ECHO 来实现这一点

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

for %f  in ("*.txt") do @echo %~nf

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

另一种选择是

FORFILES /c "cmd /c echo @fname"

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

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

for %%f in ("*.txt") do @echo %%~nf

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

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

for %f in ("*.*") do @echo %~nf

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

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

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

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

要搜索子目录,请将 '/R' 添加到 'for'

for /R %f in ("*.png") do @echo %~nf | find /v "ECHO is"

结论

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


推荐阅读