我可以在过滤批处理文件(cmd)中的某些格式时显示目录中的文件吗?

Posted

技术标签:

【中文标题】我可以在过滤批处理文件(cmd)中的某些格式时显示目录中的文件吗?【英文标题】:Can I show files in a directory while filtering certain formats in a batch file (cmd) [closed] 【发布时间】:2021-02-25 18:48:51 【问题描述】:

这是一个非常简单的问题。我想在批处理文件中显示某个目录中的所有文件。我已经写了一些代码:

dir /b /a-d 

但这所做的就是给我这种类型的输出。 (示例)

file1.txt
video.mp4
jams.mp3

有没有办法可以过滤掉纯批处理代码中的“.mp3”文件?

【问题讨论】:

只过滤.mp3文件将不再显示目录中的所有文件,除非那里只有.mp3文件!如果您想知道如何使用dir 命令,请打开命令提示符窗口,键入dir /?,按[ENTER] 键,然后阅读使用信息。您的问题不在主题范围内,因为您显然在发布之前没有尝试进行基础研究。此外,请注意,由于 8.3 命名,使用诸如 *.mp3 之类的 glob 也可能会显示其他文件。 @Compo 我知道*.mp3 有效。但我想知道如何过滤out某些格式,而不是只显示一种格式。 打开命令提示符窗口,键入findstr /?,按[ENTER] 键,然后阅读使用信息。此外,我们在网站每个页面的顶部都有一个搜索工具,请使用它。 【参考方案1】:

根据我的评论,您可以使用 Dirfindstr.exe

例如:

Dir /B/A-D | %SystemRoot%\System32\findstr.exe /EILV ".mp3"

你也可以使用powershell.exe:

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile Get-ChildItem -Exclude "*.mp3" -File -Name -Force

根据您所需的布局和用途,您还可以使用:

forfiles.exe:

%SystemRoot%\System32\forfiles.exe /C "%SystemRoot%\System32\cmd.exe /C If @IsDir==FALSE If /I Not @Ext==\"mp3\" Echo @File"

甚至Robocopy.exe:

%SystemRoot%\System32\Robocopy.exe . Null /L /NC /NDL /NJH /NJS /NS /XF "*.mp3"

【讨论】:

【参考方案2】:

这可以通过 DIR 和 FIND.EXE 来完成。使用命令FIND /? 了解 /I 和 /V 的作用。

DIR /B /A:-D | FIND /I /V ".mp3"

如果您想使用现代工具,您可以使用 PowerShell 来完成,即使是从纯批处理文件脚本运行它。

powershell -NoLogo -NoProfile -Command ^
    "(Get-ChildItem -File | Where-Object  @('.mp3') -notcontains $_.Extension ).Name"

【讨论】:

以上是关于我可以在过滤批处理文件(cmd)中的某些格式时显示目录中的文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

geany写C语言,printf打印中文时显示乱码

安装软件时显示runtime错误怎么解决

仅在应用过滤器时显示 bootstrap-vue b-table 中的项目

ng-repeat过滤器,在过滤器删除了对象时显示消息

cmd 批处理 怎样过滤掉包含某些字符的文件?

MATLAB:保存文件时显示进度条?