Powershell 按管道列出文件夹大小

Powershell 按管道列出文件夹大小,powershell,Powershell,如何根据每个文件夹/子文件夹中所有文件的总和列出目录中每个文件夹的大小 我的最新尝试: ls | foreach-object { select-object Name, @{Name = "Size"; Expression = { ls $_ -recurse | measure-object -property length -sum } } 我做过其他尝试,但没有成功。欢迎提出任何建议或解决方案。我觉得我错过了一些非常明显的东西 输出应如下所示: 名称大小 它应该列出根文件夹中的每个文

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

我的最新尝试:

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

这里可以根据您的需求进行调整。

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

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

请注意使用
-Force
确保对隐藏文件进行汇总。还要注意我使用的别名(在交互输入时很方便)。Where对象有
,Foreach对象有
%
。保存手腕。:-)

老实说,我想你基本上已经明白了

通过使用“添加成员”,您可以更优雅一点:

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

PSCX会弄乱格式设置,并将输出“”作为大小,即使您实际已获得大小。如果您使用的是PSCX,则必须添加一个显式的
|格式表模式、LastWriteTime、Length、Name-Auto

如果可能的话,我正在寻找一个更简单的单行程序。我很清楚如何在不使用管道传输数据的情况下做到这一点。你不需要为每个人都这样做……如果是这样的话,我想我还没有完全理解管道传输的逻辑流程。我得复习了,太棒了。是否创建空白对象并将其附加属性?您的案例是$res变量。是的,PowerShell 2.0中的一个小新功能是,您可以为新对象的-Property参数指定一个哈希表。对于您创建的大多数类型,这会将与哈希表中的键匹配的现有属性设置为相应的哈希表值。但是,如果类型是psobject,那么新对象将为您创建这些属性,并从哈希表中设置它们的值。非常好。知道这一点,我有更多的控制权。