2010-10-06 133 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