自制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
相关产品推荐
相关产品推荐

