You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自制CMD的dir命令:实现按扩展名排序(文件夹优先)

实现自定义CMD Dir命令的dir /o:ge排序效果

嘿,我来帮你搞定这个自定义dir命令的排序问题!你现在的代码已经能分开显示文件夹和文件,但没实现按扩展名排序文件的要求,咱们可以借助CMD自带的dir命令的排序参数来简化实现,完美复刻dir /o:ge的效果。

问题根源

你当前的代码用for /d遍历文件夹、for %%F遍历文件,这两个循环都是按系统默认的文件名排序,没有按扩展名对文件分组排序,所以达不到dir /o:ge的效果。

解决方案:利用dir /b /o:ge的排序能力

dir /o:ge本身就已经实现了「先文件夹,再按扩展名排序文件」的逻辑,我们可以用/b参数让它只输出名称,然后遍历这些输出,给文件夹加上[DIR]前缀即可:

@echo off
rem Title
echo.
echo CURRENT DIRECTORY [%cd%]
echo.
rem 借助dir /b /o:ge实现排序,再区分文件夹和文件输出
for /f "tokens=*" %%a in ('dir /b /o:ge') do (
    rem 判断当前条目是否为文件夹(路径末尾加\存在则是文件夹)
    if exist "%%a\" (
        echo [DIR] %%~nxa
    ) else (
        echo %%~nxa
    )
)
@echo on

代码解释

  • dir /b /o:ge:
    • /b:简洁模式,只输出文件/文件夹的名称,去掉日期、大小等冗余信息;
    • /o:ge:排序规则,g表示按组(文件夹优先于文件),e表示按扩展名排序文件(相同扩展名的文件会集中显示,且按名称排序),完全符合你要的dir /o:ge效果。
  • if exist "%%a\":这是CMD里判断文件夹的小技巧——如果在条目后加\仍能找到,说明是文件夹(文件无法以\结尾)。
  • %%~nxa:提取条目完整的名称(包括扩展名),确保文件夹和文件的名称显示准确。

可选扩展

如果需要显示隐藏文件或系统文件,只需要给dir命令加上/a参数,改成dir /b /a /o:ge即可,和默认dir命令的行为保持一致。

内容的提问来源于stack exchange,提问作者Derek Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:25:38