PowerShell:获取共享驱动器顶级文件夹大小并按大小排序
获取共享驱动器顶级文件夹大小并排序的PowerShell方案
你遇到的问题是因为文件夹对象本身没有Length属性,这个属性仅属于文件,所以直接调用会返回空值。要获取文件夹的实际占用大小,必须递归计算其内部所有文件的大小总和。
以下是直接可用的命令,能获取指定共享路径下的顶级文件夹大小,并按从大到小排序:
# 替换$path为你的共享驱动器路径 Get-ChildItem -Path $path -Directory -Depth 0 | Select-Object Name, @{Name='Size(GB)'; Expression={ # 递归获取文件夹内所有文件,计算总大小并转换为GB(保留两位小数) [math]::Round((Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum / 1GB, 2) }}, FullName | Sort-Object 'Size(GB)' -Descending
命令细节说明:
Get-ChildItem -Path $path -Directory -Depth 0:获取共享路径下的所有顶级文件夹,和你原命令逻辑一致。- 计算属性
@{Name='Size(GB)'; ...}:- 对每个文件夹,递归遍历内部所有文件(
-Recurse -File) - 用
Measure-Object -Sum统计所有文件的Length总和 - 除以
1GB转换为更易读的GB单位,[math]::Round(...,2)保留两位小数
- 对每个文件夹,递归遍历内部所有文件(
Sort-Object 'Size(GB)' -Descending:按文件夹大小从大到小排序
优化版本(处理权限问题)
如果共享驱动器内有部分文件夹你没有访问权限,可以添加错误忽略逻辑,避免命令中断:
Get-ChildItem -Path $path -Directory -Depth 0 | Select-Object Name, @{Name='Size(GB)'; Expression={ $totalSize = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum # 无法获取大小的文件夹返回0 if ($totalSize) { [math]::Round($totalSize / 1GB, 2) } else { 0 } }}, FullName | Sort-Object 'Size(GB)' -Descending
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

