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

PowerShell函数输出按文件夹/文件大小排序求助

问题分析与解决:PowerShell Print-Sizes函数排序无效问题

你的函数排序无效的核心原因是:最终输出的是格式化好的字符串,而非带数值属性的对象。Sort-Object只能基于对象的属性排序,直接操作字符串的话,它只会按文本的字符顺序排序,根本识别不了你要的大小数值。

修改思路

  1. 先收集每个文件夹的原始大小数值和名称,生成包含这两个属性的自定义对象
  2. 对对象数组按大小(或名称)排序
  3. 最后再格式化输出成你需要的字符串格式

修改后的完整代码

function Print-Sizes {
    # 获取当前目录下所有文件夹(用-Directory替代原Where-Object判断,更简洁)
    $colItems = Get-ChildItem -Directory
    # 遍历文件夹,生成包含名称和大小数值的自定义对象
    $folderSizes = foreach ($i in $colItems) {
        # 获取文件夹内所有文件的大小总和(用-File替代原Where-Object判断)
        $subFolderItems = Get-ChildItem $i.FullName -Recurse -Force -File | Measure-Object -Property Length -Sum
        # 创建自定义对象,保留原始数值用于排序
        [PSCustomObject]@{
            FolderName = $i.Name
            SizeInMB   = $subFolderItems.Sum / 1MB
        }
    }
    # 按大小降序排序(去掉-Descending就是升序),再格式化输出
    $folderSizes | Sort-Object -Property SizeInMB -Descending | ForEach-Object {
        '{0:N2} MB     |   {1}' -f $_.SizeInMB, $_.FolderName
    }
}

关键说明

  • 用[PSCustomObject]创建带属性的对象,让Sort-Object能识别SizeInMB这个数值属性进行排序
  • 原代码里的$startFolder变量未定义,默认会使用当前目录,所以直接用Get-ChildItem -Directory即可
  • 替换了原代码中繁琐的Where-Object判断,用PowerShell内置的-Directory和-File参数更高效
  • 如果需要按文件夹名称排序,只需把Sort-Object -Property SizeInMB -Descending改成Sort-Object -Property FolderName

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:02:46