簡単な方法
残念ながら、PowerShell の標準コマンドでは、一発でディレクトリのサイズを取得することができません。
もし、モジュールを使って問題なければ、PowerShell Gallery にディレクトリサイズを計算するモジュールがあるので、これを使うのが一番簡単です。
PowerShell Gallery | PSFolderSize
インストールしたら、Get-FolderSize
コマンドでサイズが取得できるので、パイプでつないでソートします。
Get-FolderSize | Sort-Object SizeMB -Descending
結果はこのようになります。
なお、ここでは降順でソートしていますが、昇順にしたい場合は「Sort-Object」の「-Descending」を削除してください。
標準コマンドでどうにかする
PowerShell の標準コマンドだけでディレクトリサイズを取得するためには、自前で各ディレクトリ毎にファイルサイズを集計する必要があります。
やや強引ですが、集計・ソート・表示を一行にまとめたものがこちらです。
Get-ChildItem -Directory | %{$size = (Get-ChildItem $_ -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum ; $_ | Add-Member Size $size ; $_} | Sort-Object Size -Descending | Format-Table Name,Size
結果はこのようになります。
簡単な説明
適度に改行と簡単な説明を入れたコードです。 ちなみにこちらもコピー&ペーストすれば、実行できます。
Get-ChildItem -Directory |
%{
$size = (
<# 各ディレクトリ毎に再帰的にファイルを取得する #>
Get-ChildItem $_ -Recurse |
<# 取得したファイルの Length (サイズ)を合算 #>
Measure-Object -Property Length -Sum -ErrorAction Stop
).Sum
<# 合算したサイズを元のディレクトリオブジェクトに追加 #>
$_ | Add-Member Size $size
$_
} |
<# 追加されたサイズで降順ソート #>
Sort-Object Size -Descending |
<# ディレクトリ名とサイズを指定して表示 #>
Format-Table Name,Size