批处理:如何按扩展对输出进行排序

Posted

技术标签:

【中文标题】批处理:如何按扩展对输出进行排序【英文标题】:Batch: How to sort the output by Extension 【发布时间】:2021-06-04 06:45:53 【问题描述】:

我对输出应该是按名称排序的扩展文件列表的位置进行了连接。拖到批处理的源是一个带有子文件夹的文件夹。

我得到的是:

.mp3
.txt
.mp3
.mp3
.txt
.docx
.txt
.docx

我想要的是:

.docx
.docx
.docx
.mp3
.mp3
.mp3
.txt
.txt
.txt

当前代码:

@echo off
chcp 1252 > nul
pushd "%~1"
for /f "Delims=" %%a in ('"for /f "Delims^=" %%b in ('dir /b /s /a-d') do @echo %%~xb"') do echo %%a
pause

我只需要按名称对输出进行排序,但如果我尝试排序命令它不起作用:

@echo off
chcp 1252 > nul
pushd "%~1"
for /f "Delims=" %%a in ('"for /f "Delims^=" %%b in ('dir /b /s /a-d') do @echo %%~xb |sort"') do echo %%a
pause

如果可能的话,我不想使用文本文件。

【问题讨论】:

您不想使用文本文件的原因是什么?它不仅很可能更快,而且sort 命令本身可能会使用默认临时目录中的文件来保存其工作存储,如果数据不适合主内存。 我只是认为如果不需要外部文件最好不要使用它们,但如果不可能,否则我会使用文本文件.... 【参考方案1】:

您已经非常接近您当前拥有的内容,您只是缺少dir/o 标志来对输出进行排序,并结合e 选项来按扩展名排序。如果将所有内容都放在代码块中,则可以在整个命令完成后对其输出进行排序。

@echo off

chcp 1252 >nul
(
    for /f "delims=" %%A in ('dir /b /s /a:-d /o:e "%~1"') do @echo %%~xA
) | sort

pause

【讨论】:

没用,正如你自己所说,它仍然按子文件夹排序.... @RicardoBohner - 我已更新代码以在显示所有内容后执行排序。扩展不再按子文件夹分组。 这个成功了,非常感谢...??????

以上是关于批处理:如何按扩展对输出进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何按位置对矩形数组进行排序?

Elasticsearch:使用处理器对数组进行排序

Elasticsearch:使用处理器对数组进行排序

如何按日期降序对数据表进行排序

在js中使用递归函数按扩展名对文件进行排序

如何按值对 STL 映射进行排序?