如何在CMD中实现子到父目录遍历,优先列出最深子目录再输出父目录
CMD下实现目录从子到父反向输出的解决方案
你之前使用的
dir /A:D/S/B/O:-D中O:-D参数是按目录修改时间降序排序,和目录层级无关,因此无法实现按子到父的层级倒序输出。
方案1:借助PowerShell(推荐)
当前Windows系统默认预装PowerShell,你可以直接在CMD窗口内执行以下命令,无需切换环境:
powershell "Get-ChildItem -Directory -Recurse 'D:\Income' | Select-Object -ExpandProperty FullName | Sort-Object -Property Length -Descending"
命令逻辑:
- 递归读取指定路径下的所有目录
- 提取目录的完整路径
- 按路径字符串长度从长到短排序,天然匹配子目录路径更长、父目录路径更短的规律,完全符合你需要的输出顺序。
如果需要将结果保存到本地文件,可直接追加输出重定向:
powershell "Get-ChildItem -Directory -Recurse 'D:\Income' | Select-Object -ExpandProperty FullName | Sort-Object -Property Length -Descending" > D:\目录列表.txt
方案2:纯CMD批处理实现
如果需要完全不依赖PowerShell,可使用以下批处理脚本:
@echo off :: 替换为你需要遍历的根目录 set "root_dir=D:\Income" :: 将所有目录路径写入临时文件 dir /A:D /S /B "%root_dir%" > tmp_dir_list.tmp :: 统计临时文件的总行数 for /f %%a in ('find /c /v "" ^< tmp_dir_list.tmp') do set line_cnt=%%a :: 从最后一行倒序读取输出 for /l %%i in (%line_cnt%, -1, 1) do ( for /f "tokens=1* delims=:" %%p in ('findstr /n "^" tmp_dir_list.tmp ^| findstr "^%%i:"') do echo %%q ) :: 清理临时文件 del tmp_dir_list.tmp pause
将上述代码保存为.bat后缀的文件,双击运行即可得到目标顺序的目录列表。
内容的提问来源于stack exchange,提问作者user2782522
相关产品推荐
相关产品推荐

