在Powershell中显示大小的目录结构

时间:2010-10-06 19:45:50

标签: powershell directory size

尝试使用“dir”命令显示子文件夹和文件的大小。 在谷歌搜索“powershell目录大小”后,我找到了两个有用的链接

  1. 确定文件夹的大小http://technet.microsoft.com/en-us/library/ff730945.aspx
  2. 获取目录总大小的PowerShell脚本PowerShell Script to Get a Directory Total Size
  3. 这些灵魂很棒,但我正在寻找类似“dir”输出的东西,方便而简单,我可以在文件夹结构中的任何地方使用。

    所以,我最终做到了这一点,任何建议都要简单,优雅,高效。

    Get-ChildItem | 
    Format-Table  -AutoSize Mode, LastWriteTime, Name,
         @{ Label="Length"; alignment="Left";
           Expression={ 
                        if($_.PSIsContainer -eq $True) 
                            {(New-Object -com  Scripting.FileSystemObject).GetFolder( $_.FullName).Size}  
                        else 
                            {$_.Length} 
                      }
         };  
    

    谢谢。

1 个答案:

答案 0 :(得分:8)

第一个小mod是为了避免为每个目录创建一个新的FileSystemObject。将此作为一个函数并将新对象拉出管道。

function DirWithSize($path=$pwd)
{
    $fso = New-Object -com  Scripting.FileSystemObject
    Get-ChildItem | Format-Table  -AutoSize Mode, LastWriteTime, Name, 
                    @{ Label="Length"; alignment="Left"; Expression={  
                         if($_.PSIsContainer)  
                             {$fso.GetFolder( $_.FullName).Size}   
                         else  
                             {$_.Length}  
                         } 
                     }
}

如果你想完全避免使用COM,你可以像这样使用PowerShell来计算目录大小:

function DirWithSize($path=$pwd)
{
    Get-ChildItem $path | 
        Foreach {if (!$_.PSIsContainer) {$_} `
                 else {
                     $size=0; `
                     Get-ChildItem $_ -r | Foreach {$size += $_.Length}; `
                     Add-Member NoteProperty Length $size -Inp $_ -PassThru `
                 }} |
        Format-Table Mode, LastWriteTime, Name, Length -Auto
}