通过管道列出文件夹大小

时间:2010-08-16 17:09:35

标签: powershell

如何通过每个文件夹/子文件夹中所有文件的总和列出目录中每个文件夹的大小?

我的最新尝试:

ls | foreach-object { select-object Name, @{Name = "Size"; Expression = { ls $_ -recurse | measure-object -property length -sum } }

我做了其他尝试,但没有成功。我们非常欢迎任何建议或解决方案。我觉得我错过了很明显的东西。

输出应如下所示:

名称大小

它应该列出根文件夹中的每个文件夹以及该文件夹的子文件夹的文件夹大小。

我能够通过以下方式解决问题:

param([String]$path)
ls $path | Add-Member -Force -Passthru -Type ScriptProperty -Name Size -Value {  
   ls $path\$this -recurse | Measure -Sum Length | Select-Object -Expand Sum } | 
   Select-Object Name, @{Name = "Size(MB)"; Expression = {"{0:N0}" -f ($_.Size / 1Mb)} } | sort "Size(MB)" -descending

3 个答案:

答案 0 :(得分:5)

我认为你基本上得到了它,老实说。

使用Add-Member可以更优雅:

ls | Add-Member -Force -Passthru -Type ScriptProperty -Name Length -Value { 
   ls $this -recurse | Measure -Sum Length | Select -Expand Sum }

PSCX与格式混淆,即使你实际上有一个大小,也会输出大小的“”。如果您使用的是PSCX,则必须添加明确的| Format-Table Mode, LastWriteTime, Length, Name -Auto

答案 1 :(得分:1)

它不是特别优雅,但应该完成工作:

gci . -force | ?{$_.PSIsContainer} | 
   %{$res=@{};$res.Name=$_.Name; $res.Size = (gci $_ -r | ?{!$_.PSIsContainer} |
     measure Length -sum).Sum; new-object psobject -prop $res}

请注意使用-Force确保您总结隐藏文件。还要注意我使用的别名(交互式输入时很方便)。 Where-Object为?,Foreach-Object为%。保存手腕。 : - )

答案 2 :(得分:0)

这里is a handy Powershell example script可能适合您所寻找的内容。