如何用PowerShell获取Windows系统D盘所有含子目录的文件夹大小?
获取D盘所有文件夹大小的PowerShell实现
要递归获取D盘所有文件夹(包含子目录)的大小,你需要遍历每个目录并计算其内部所有文件的大小总和。以下是两种实用的实现方式:
方法一:逐目录递归计算
Get-ChildItem -Path "D:\" -Directory -Recurse | ForEach-Object { $totalSize = (Get-ChildItem -Path $_.FullName -File -Recurse | Measure-Object -Property Length -Sum).Sum [PSCustomObject]@{ 文件夹路径 = $_.FullName 字节大小 = $totalSize MB大小 = [math]::Round($totalSize / 1MB, 2) GB大小 = [math]::Round($totalSize / 1GB, 2) } } | Sort-Object -Property 字节大小 -Descending
代码说明:
-Directory -Recurse:递归列出D盘下所有文件夹- 对每个文件夹,遍历其下所有文件并通过
Measure-Object计算总大小 - 用
PSCustomObject输出结构化结果,包含多种单位的大小,方便直观查看 - 最后按大小倒序排列,快速定位占用空间大的文件夹
方法二:高效分组计算(减少重复遍历)
如果D盘文件数量较多,方法一的重复递归遍历会影响效率,可先一次性获取所有文件再按目录分组计算:
Get-ChildItem -Path "D:\" -File -Recurse | Group-Object -Property DirectoryName | ForEach-Object { $totalSize = ($_.Group | Measure-Object -Property Length -Sum).Sum [PSCustomObject]@{ 文件夹路径 = $_.Name 字节大小 = $totalSize MB大小 = [math]::Round($totalSize / 1MB, 2) GB大小 = [math]::Round($totalSize / 1GB, 2) } } | Sort-Object -Property 字节大小 -Descending
代码说明:
- 一次性递归获取D盘所有文件,按所在目录分组
- 对每组(对应一个目录)计算文件总大小,避免重复遍历目录结构,效率更高
- 输出格式与方法一致,同样支持排序
注意事项:
- 运行时可能需要管理员权限,否则部分系统或受保护文件夹会因权限不足无法访问
- 计算大目录需要一定时间,耗时取决于D盘的文件数量和总大小
- 若不需要多单位显示,可删除
MB大小和GB大小字段简化输出
内容的提问来源于stack exchange,提问作者Sally
相关产品推荐
相关产品推荐

