我正在尝试列出不包括扩展名的文件名,
我想要什么:
File1
File2
File3
目前情况:
File1.txt
File2.txt
File3.txt
我试过用
@echo off
dir /A:-D /B
pause
但它不起作用。我在批处理文件和命令提示符下都试过了。
我使用的命令是否正确?
最佳答案
使用 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.
为了避免这破坏你的后续计划,你可以使用 FIND
命令和 /V
选项过滤掉包含 ECHO is
的行:
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"
结论
当然,这一切都太疯狂了,但这是我们为使用批处理语言而不是实际的明智语言而付出的痛苦代价。我就像一个酒鬼,向所有人 promise 我再也不会写一行 Batch 代码,然后发现自己又回来写了,不好意思。
关于windows - 如何使用 dir 命令只显示没有扩展名的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54962981/