windows - 如何使用 dir 命令仅显示不带扩展名的文件名
问题描述
我正在尝试列出不包括扩展名的文件名,
我想要它:
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.
为了避免这种情况,您可以使用命令和选项过滤掉包含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 代码,然后发现自己又回来这样做了,不好意思。
推荐阅读
- clojure - 在Clojure中,为什么在定义函数时必须使用括号以及let的用例
- javascript - SVG 的 Chrome 剪辑路径错误的可能解决方法
- c# - 如何拦截 xamarin 表单的后退按钮?
- button - document.querySelector 返回字符串而不是数字
- windows - 哪个是 Windows 右键菜单中复制选项(选定文本)的注册表项路径?
- elixir - 在变更集中的多个字段上应用 Ecto validate_length
- firebase - 在 Firestore 中原子写入 2k+ 文档
- c# - 如何比较两个 IEnumerable
如果我不知道实际的对象类型,在 C# 中? - stored-procedures - PLSQL存储过程返回动态查询的结果
- java - Java Spring 应用的 TimeZone Brazil