在 Windows 命令行上使用 DIR 命令排除特定扩展名的文件

在 Windows 命令行上使用 DIR 命令排除特定扩展名的文件

如果我只想使用目录列表查看特定扩展名的文件,我可以使用以下命令:

DIR *.txt 

它显示了所有带有.txt扩展名的文件。
现在我想知道是否有任何命令可以排除某些扩展名?
例如,我不想看到任何带有扩展名的文件.exe,我该怎么做?

答案1

DIR 不允许你尝试执行的操作。但是 DIR 和 FINDSTR 可以解决这个问题。

例如,下面忽略 DIR 列表中的所有 .txt 文件。

dir | findstr /v /i "\.txt$" 

答案2

dir /B | find /V ".txt"

这将列出所有文件,并且 find 将过滤掉不包含“.txt”的任何文件。这远非完美,但也许已经足够了 :)

答案3

这取决于您的命令解释器。

微软cmd没有这样的功能,正如你从其他答案中看到的那样,人们必须对 的输出进行后处理dir。然而,JP Software 的 TCC/LE具有此功能。它被称为文件排除范围并且像这样用于您问题中的示例:

目录 /[!*.exe] *

答案4

为此,使用 定义一个宏DOSKEY。我排除了目录并忽略了大小写——YMMV。此外,/B似乎是最合理的DIR过滤选项,/D/W不适合该任务,以及长格式/N(默认)和/X在某些情况下在文件名后包含附加文本(用于符号链接)。在命令行上检查它:

DOSKEY  FIR=DIR/B/A-D^|FINDSTR /VIE $*
DOSKEY FLIR=DIR/X/A-D^|FINDSTR /VIE $*

FIR为了已过滤 DIR,明白了吗?:)FLIR如果需要,可以使用长版本。然后像这样使用它:

fir .jpg
flir jpg
fir "jpg htm"

后者是因为如何FINDSTR读取作为参数提供的模式,如 中所述/?。只有第一个参数被视为模式,其他参数被解释为文件名,即使在管道中运行时也是如此。

FINDSTR更喜欢 plain,FIND因为它有一个时髦的/E开关,只在行尾进行过滤,这在按文件扩展名过滤时似乎更可取(但同样,YMMV)。

方便的SS64 站点解释如何在文件中设置宏TXT以供永久重复使用。请注意,^文本文件中存储的宏没有转义特殊字符的插入符号。

要了解宏(“控制台别名”)的工作原理,请阅读Eryk Sun 对 SO 的简短评论

相关内容