如何用CMD按大小排序显示C盘所有文件,避免按目录分组?
解决CMD中C盘文件全局按大小排序显示的问题
CMD自带的dir命令存在局限性:使用/s参数遍历子目录时,它会先处理当前目录,再逐个遍历子目录,并且/o-s仅对每个目录内的文件单独排序,最终输出会按目录分组,无法实现所有文件的全局统一排序。
以下提供两种可行的解决方法:
方法1:使用PowerShell命令(推荐,简洁高效)
直接在CMD窗口中执行以下命令,即可全局按文件大小降序输出C盘所有文件的完整路径:
powershell -Command "Get-ChildItem C:\ -File -Recurse | Sort-Object -Property Length -Descending | Select-Object -ExpandProperty FullName"
命令说明:
Get-ChildItem C:\ -File -Recurse:遍历C盘所有文件(排除目录)Sort-Object -Property Length -Descending:按文件大小(Length)降序排序Select-Object -ExpandProperty FullName:提取并输出文件的完整路径
方法2:纯CMD脚本实现
如果必须使用纯CMD环境,可创建一个批处理脚本(例如sort_files.bat),内容如下:
@echo off setlocal enabledelayedexpansion :: 跳过dir命令的头部无关信息,提取文件大小和完整路径 for /f "skip=5 tokens=3*" %%a in ('dir C:\ /a-d /s /-c /n') do ( :: 将文件大小补为10位数字,确保排序时数值逻辑正确 set "file_size=0000000000%%a" set "file_size=!file_size:~-10!" :: 输出补位后的大小+文件路径,供后续排序 echo !file_size! %%b ) | sort /r | for /f "tokens=2*" %%a in ('more') do ( :: 去掉补位的大小,仅输出文件路径 echo %%a %%b ) endlocal
脚本说明:
dir C:\ /a-d /s /-c /n:输出C盘所有文件的信息,/-c去掉大小的千分位分隔符,/n让文件名在末尾便于提取- 补位文件大小是为了避免
sort命令按文本排序时出现逻辑错误(例如1000被排在999前面) sort /r实现降序排序,最后提取并输出文件路径
内容的提问来源于stack exchange,提问作者Андрій Іванович Федоришин
相关产品推荐
相关产品推荐

