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

Batch file 批处理:如何按扩展对输出进行排序,batch-file,command,Batch File,Command,我做了一个连接,输出应该是按名称排序的扩展名的文件列表。拖动到批处理的源是包含子文件夹的文件夹 我得到的是: .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 ('&qu

我做了一个连接,输出应该是按名称排序的扩展名的文件列表。拖动到批处理的源是包含子文件夹的文件夹

我得到的是:

.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
我只需要按名称对输出进行排序,但如果我尝试使用sort命令,它将不起作用:

@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

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

您已经非常接近您当前拥有的内容,只是缺少了
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

您不想使用文本文件的原因是什么?它不仅可能更快,而且
sort
命令本身可能会使用默认临时目录中的一个文件来保存其工作存储,如果数据不适合主内存。我只是认为如果不需要,最好不要使用外部文件,但是,如果不可能,我会使用文本文件…不起作用,正如你自己所说,它仍然按子文件夹排序…@RicardoBohner-我已经更新了代码,以便在显示所有内容后执行排序。扩展不再按子文件夹分组。此扩展有效,非常感谢。。。