使用 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 的文件。
要搜索子目录,请在“for”中添加“/R”
for /R %f in ("*.png") do @echo %~nf | find /v "ECHO is"
结论
这太疯狂了,但这是我们为使用 Batch 语言而不是任何其他语言(根本!)而付出的痛苦代价。我就像一个酒鬼,向所有人承诺,我永远不会再写一行 Batch 代码,然后发现自己又回来这样做了,不好意思。