WindowsでPowerShellを使用してフォルダサイズを測定する方法

Windowsでフォルダがどれだけの容量を占めているかを把握するのは、特に巨大なディレクトリを扱っている場合や、TreeSizeやWinDirStatなどのサードパーティ製ツールに頼らずに、素早く柔軟にサイズを確認したい場合には、少々難しい場合があります。そんな時、PowerShellが役に立ちます。完璧ではありませんが、隠しファイルやシステムファイルを含むディスク使用量の正確な状況を把握できるほど強力で、ファイルの種類、作成日、その他のプロパティでフィルタリングすることも可能です。さらに、これらの統計情報を定期的に取得したり、プロセスをある程度自動化したりする必要がある場合にも便利です。

PowerShellを使ってWindowsのフォルダサイズを確認する方法

PowerShellでフォルダのサイズを取得する

この方法を使えば、特定のフォルダがどれだけの容量を使用しているか、サブフォルダも含めて再帰的に確認できます。ディスク上の容量を素早く把握したい時に最適です。

  • PowerShell を開くWin + XPowerShell タブで Windows PowerShell または Windows Terminal を押して選択できます。
  • フォルダに移動する、またはコマンドを直接実行します。例えば、D:\ISOをチェックしたい場合は、次のコマンドを実行します。
(Get-ChildItem D:\ISO -Force -Recurse -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1GB

このコマンドは、隠しファイルやシステム ファイル (-Force) を含むD:\ISO内のすべてのファイルを一覧表示し、すべてのサブフォルダー (-Recurse) を一覧表示し、アクセスできないファイルを無視し (-ErrorAction SilentlyContinue)、すべてのサイズを合計し、1 GB で割ってギガバイト単位のおおよそのサイズを算出します。

パラメータとその機能の説明

  • -Force : 隠しファイルとシステム ファイルを含めます (そうしないと、一部の大きなファイルが非表示になる可能性があるため)。
  • -Recurse : サブフォルダーが含まれていることを確認します。これはよく間違えるので、忘れないようにしてください。
  • -ErrorAction SilentlyContinue : 権限のないファイルをスキップします。(設定によっては、多くのファイルをスキップする場合がありますが、他の設定ではそれほど多くスキップされない場合があります。)
  • Measure-Object Length -Sum : すべてのファイル サイズを合計します。Length はファイル サイズを格納するプロパティです。
  • / 1GB : 読みやすくするためにバイトをギガバイトに変換します。大きなフォルダーの場合、バイトはあまり意味がないため。

これらをすべてまとめると、ディレクトリのおおよそのサイズが得られます。結果を小数点以下2桁に丸め(より読みやすくする)たい場合は、次のようにします。

"{0:N2} GB" -f ((Get-ChildItem D:\ISO -Force -Recurse -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1GB)

ファイルの種類や日付でフィルタリング – より深く掘り下げるのに便利

ISOファイルだけ、または2024年に作成されたファイルだけを表示したい場合は、コマンドを調整できます。例えば、ISOファイルだけをチェックするには、次のようにします。

"{0:N2} GB" -f ((Get-ChildItem D:\ISO *.iso -Force -Recurse -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1GB)

2024 年 1 月 1 日以降に作成されたファイルの場合:

(Get-ChildItem D:\ISO -Force -Recurse -ErrorAction SilentlyContinue | ? { $_. CreationTime -gt '1/1/24' } | Measure-Object Length -Sum).Sum / 1GB

注意:シンボリックリンクやハードリンクがある場合、PowerShell はリンクされたファイルを複数回カウントすることがあるため、サイズが歪む可能性があります。これを回避するには、リンクを除外することも可能ですが、より高度な機能が必要になります。

スクリプトでサブフォルダのサイズを取得する

最上位のサブフォルダとそのサイズ(およびその中に含まれるファイル数)を素早く確認したい場合は、簡単なスクリプトで十分です。このスクリプトは、サイズまたはファイル数で並べ替え可能な表を出力します。これは、どのユーザープロファイルやプロジェクトフォルダが容量を占有しているかを把握するのに非常に便利です。

$targetfolder='C:\Users' $dataColl = @() Get-ChildItem -Path $targetfolder -Force -ErrorAction SilentlyContinue | Where-Object { $_ -is [IO. DirectoryInfo] } | ForEach-Object { $sizeInBytes = 0 Get-ChildItem -Path $_. FullName -Recurse -Force -ErrorAction SilentlyContinue | ForEach-Object { $sizeInBytes += $_. Length } $fileCount = (Get-ChildItem -Path $_. FullName -Recurse -Force -File -ErrorAction SilentlyContinue | Measure-Object).Count $obj = [PSCustomObject]@{ Folder = $_. FullName SizeGB = '{0:N3}' -f ($sizeInBytes / 1GB) FileCount = $fileCount } $dataColl += $obj } $dataColl | Out-GridView -Title "Subfolder sizes and file counts"

このスクリプトは、C:\Users内のすべての上位フォルダを取得し、サイズを合計し、ファイルの数を数えて、ウィンドウに表示します。必要に応じて右クリックしてCSVまたはExcelにエクスポートできます。PowerShell 7.xを含む複数のバージョンで動作を確認しているので、移植性は高いです。

注意:設定によっては、特に巨大なフォルダの場合は遅くなる場合があります。忍耐が鍵となります。また、スクリプトがハードリンクまたはシンボリックリンクを2回含む場合があり、そのディレクトリ内でリンクが頻繁に使用される場合は、サイズが多少ずれることがあります。

まとめ

PowerShellを使ってフォルダサイズを調べると、特にフィルターの微調整や一括スキャンに慣れていれば、非常に柔軟に操作できます。少し面倒ではありますが、追加のソフトウェアをインストールすることなく、目的を達成できます。ただし、これらのコマンドは概算値であり、リンクや権限の影響を受ける可能性があることにご注意ください。

まとめ

  • フォルダーのサイズを見つけるには、PowerShell コマンドの `Get-ChildItem` および `Measure-Object` を使用します。
  • 特定のファイルに対して `*.iso` などのフィルターや日付範囲を追加します。
  • スクリプトを実行して複数のサブフォルダーを一度にチェックし、データを視覚化します。
  • シンボリック リンクまたはハード リンクは数字を混乱させる可能性があることに注意してください。

まとめ

追加のツールを使わずに、フォルダがどれくらいの容量を占めているかを自分で把握できるのは非常に便利です。複雑なフォルダ構造の場合は特に完璧とは言えませんが、概算を素早く把握するには十分です。さらに、ほぼあらゆるシナリオに合わせてカスタマイズできます。ただし、非常に大きなディレクトリやリンクが多い場合は、動作が遅くなる可能性があることに注意してください。ディスク容量の解放やフォルダの監査をしようとしている人にとって、これで数時間の節約になれば幸いです。お役に立てれば幸いです!