PowerShell脚本实现指定文件夹及子文件夹大小查询需求求助
定制化文件夹大小查询脚本(支持指定父目录与递归选项)
原脚本核心逻辑说明
先拆解下原脚本的关键命令,帮你理解:
gci -Directory:默认仅获取当前目录的直接子文件夹,不会递归深层目录$fso.GetFolder($_.FullName).Size:通过Windows的FileSystemObject COM对象快速计算文件夹总大小(包含所有子文件、子文件夹的大小,比PowerShell原生递归求和效率更高)- 后续的
select/sort/ft都是做数据整理、排序和格式化输出
修改后的脚本(支持自定义参数)
function Get-FolderSize { param( # 指定要查询的父文件夹路径(默认当前目录) [string]$Path = $PWD.Path, # 是否递归查询所有子文件夹(默认仅查直接子文件夹) [switch]$Recurse ) # 创建FileSystemObject COM对象 $fso = New-Object -ComObject Scripting.FileSystemObject # 获取目标文件夹下的子文件夹(根据Recurse参数决定是否递归) $folderList = Get-ChildItem -Path $Path -Directory -Recurse:$Recurse ` | Select-Object ` @{Name='Size [GB]'; Expression={'{0:N2}' -f ($fso.GetFolder($_.FullName).Size / 1GB)}}, FullName ` | Sort-Object -Property @{Expression={$fso.GetFolder($_.FullName).Size}; Descending=$true} # 输出结果 $folderList | Format-Table -AutoSize }
使用示例
- 查询
C:\Users目录下的直接子文件夹大小:
Get-FolderSize -Path "C:\Users"
- 查询
D:\Work目录下的所有递归子文件夹大小(包含深层目录):
Get-FolderSize -Path "D:\Work" -Recurse
- 查询当前目录下的直接子文件夹大小(省略Path参数):
Get-FolderSize
额外说明
- 用
-AutoSize格式化表格,会自动调整列宽,避免路径被截断 - 如果需要以MB为单位显示,把
/ 1GB改成/ 1MB即可,同时修改表头为Size [MB] - 若遇到权限问题,脚本会跳过无访问权限的文件夹,不会中断运行
内容的提问来源于stack exchange,提问作者NotAfcknDJ
相关产品推荐
相关产品推荐

