如何将PowerShell文件夹大小统计脚本结果导出为CSV?
嘿,我完全懂你的感受——本来以为导出个CSV是小事,结果折腾半天,确实闹心!咱们把原脚本调整一下,改成输出结构化数据,就能轻松导出成易读的CSV了,一步步来:
首先,原脚本的问题在于它输出的是拼接好的字符串,而CSV需要的是结构化的键值对数据。所以我们得先让脚本生成带属性的对象,再导出。
修改后的完整脚本
# 设定要扫描的目标路径 $targetDir = "C:\Users\user.name\Desktop" # 扫描文件夹、计算大小,并生成结构化数据对象 $folderSizeResults = Get-ChildItem $targetDir -Directory | Sort-Object Name | ForEach-Object { # 递归获取所有文件并计算总大小 $totalSize = Get-ChildItem $_.FullName -Recurse -Force -File | Measure-Object -Property Length -Sum # 创建自定义对象,包含文件夹路径和转换为MB的大小(保留两位小数) [PSCustomObject]@{ "文件夹路径" = $_.FullName "大小(MB)" = [math]::Round(($totalSize.Sum / 1MB), 2) } } # 导出到CSV文件(路径可以自己修改) $folderSizeResults | Export-Csv -Path "C:\Users\user.name\Desktop\文件夹大小统计.csv" -NoTypeInformation -Encoding UTF8
关键调整说明
- 用
-Directory替代了原来的Where-Object {$_.PSIsContainer -eq $true},PowerShell 3.0+支持这种更简洁高效的写法。 - 用
-File替代Where-Object {$_.PSIsContainer -eq $false},同样是更现代、易读的写法。 - 生成
[PSCustomObject]是核心!每个文件夹对应一个带“文件夹路径”和“大小(MB)”属性的对象,这样导出CSV时会自动生成清晰的表头,数据规整有序。 [math]::Round(...,2)和原脚本的{0:N2}效果一致,确保大小保留两位小数,可读性更强。Export-Csv的参数优化:-NoTypeInformation会去掉CSV开头多余的类型注释,让文件更干净;-Encoding UTF8能避免中文路径或名称出现乱码问题。
小提示
- 导出完成后,直接用Excel打开CSV就能看到规整的表格格式;用文本编辑器打开的话,也是逗号分隔的清晰数据。
- 如果遇到空文件夹,脚本会自动显示
0MB,不会出现报错。
内容的提问来源于stack exchange,提问作者Heather
相关产品推荐
相关产品推荐

