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

标签 windows batch-file command-prompt

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

我想要什么:

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/

相关文章:

c++ - 在winsock2中使用select时,直接遍历 “readfds(fdsets)”是否合适?

installshield - 使用 InstallShield 2010 启动 exe 和 bat 文件

postgresql - 为什么 pg_restore 返回 "options -d/--dbname and -f/--file cannot be used together"?

linux - 为什么我不能在 PS1 中使用 $(...) 而不是反引号?

windows - 如何在 Windows 上通过 bash 访问 AWS SAM-CLI?

java - 使用 servlet jsp 在 Windows 中将 Hbase 作为 DB 运行

python-3.x - Nuitka编译的*.exe程序执行时如何隐藏cmd控制台?

windows - 带有 ubuntu 和 Windows 的 Hadoop 集群

linux - 包含多个命令的 Shell 脚本文件

sdk - Visual Studio 2012 命令行构建