Windowsで容量の大きいファイル&ディレクトリを調べる

以前、Linuxで容量の大きいファイル、ディレクトリを調べる方法について記述したので、今回はWindows版。PowerShell、コマンドプロンプトでの調べ方を紹介する。

1.容量の大きいファイルを調べる

Windowsのコマンドプロンプトで容量の大きいファイルを調べる場合、forfilesコマンドを用いると良いだろう。
とは言え、容量の大きいファイルを上から順に何個、というのはコマンドプロンプト上から一行で出力は難しい。そのため、何バイト以上のファイルのみ出力させる方法で確認をする。
以下の例では、1GB以上のファイルのみ出力するように指定している。

forfiles -s -p "確認するディレクトリのパス" -c "cmd /c if @fsize gtr 1073741824 echo @FDATE @FSIZE @PATH"

PowerShellで確認する場合は、以下のコマンドで指定したディレクトリのサブディレクトリを含めた、容量の大きいファイルから順に出力可能だ。

(Get-ChildItem "確認するディレクトリのパス" -recurse -force |  Select-Object Fullname,Length  | Sort-Object Length -descending )[0..10]

2.容量の大きいディレクトリを調べる

Windowsで容量の大きいディレクトリを調べる場合、カレントディレクトリ配下のもののみであれば、以下のコマンドで確認出来る。

cd 確認するディレクトリのパス
for /D %a in (*) do @for /F "tokens=3" %s in ('dir "%a" ^| find "個のファイル"') do @echo %a : %s : %~ta

もしくは、こちらの方が作成されたコマンドを利用することで、一行で利用容量が上位のディレクトリを確認出来る。

PowerShellの場合だと、Microsoftの公式なHowto情報より、以下のようにコマンドを実行することで確認可能だ。

function dusage{ 
  param([String]$tgtDir = (pwd).Path) 

  filter dusage_filter{ 
    $sum = (dir -literalpath $_.FullName -recurse -force -erroraction silentlycontinue | 
      measure-object Length -sum).Sum 
    $result = New-Object Object |  
      Add-Member NoteProperty Folder $_.FullName -PassThru |  
      Add-Member NoteProperty Size $sum -PassThru 
    return $result 
  } 

  dir $tgtDir -force -erroraction silentlycontinue | 
    ? {$_.PSIsContainer} | dusage_filter 
} 

dusage -tgtDir "c:\work" | sort -des size

…さすがに、Linux/UNIXほど思っていたように、しかも簡単には出力出来ないようだ。
もうちょっと、簡単にコマンド操作が出来るといいんだけど…