2010-10-06 103 views
5

尝试使用显示子文件夹和文件大小的“dir”命令。 谷歌搜索“的PowerShell目录大小”之后,我发现thew两个有用的链接在Powershell中显示大小的目录结构

  1. 确定一个文件夹http://technet.microsoft.com/en-us/library/ff730945.aspx
  2. PowerShell脚本的大小以获得一个目录总大小PowerShell Script to Get a Directory Total Size

这些soultions都是伟大的,但我正在寻找类似“目录”输出的东西,方便又简单,并且我可以在文件夹结构中的任何位置使用。

所以,我最终这样做,任何建议,使其简单,优雅,高效。

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} 
        } 
    }; 

谢谢。

回答

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 
} 
+0

谢谢你基思,我最终什么事做的是将这一功能在配置文件中,所以我可以访问它,只要我使用PS – iraSenthil 2010-10-07 00:43:15

+0

@Keith Hill:+1和如果我能这样做两次,我会...我试图清理我的HD,因为我的VMware正在死亡,并且想要容易地看到磁盘空间正在发生。这是一个真正的帮助! – wmorrison365 2013-03-14 11:48:07

+0

又回来了! :-) – wmorrison365 2017-06-12 09:13:19