コマンドプロンプトでフォルダ全体の合計を確認するならdir /a /s /-c "C:\Data"、各サブフォルダの容量を一覧で比較するならSysinternals Duの-l 1やPowerShellでのフォルダ別集計を使います。ここでは、配下を含む容量の見方、隠し項目・リンク・アクセス拒否による集計の違いを説明します。
最初に確認するポイント
| 症状・条件 | 主な原因 | 最初の確認 |
|---|---|---|
| dir /sの結果が長く、どこが合計か分からない | dirは各サブフォルダの一覧を出した後、最後に全体のファイル数と累積サイズを表示します。 | 出力の最終行付近にあるファイル数とバイト数を確認し、解析しやすくする場合は /-c で桁区切りを外します。 |
| tree /fを実行してもファイルサイズが出ない | treeはディレクトリ構造を表示するコマンドで、/f はファイル名を追加表示するだけです。 | 容量計算はdir、PowerShell、またはSysinternals Duへ切り替えます。 |
| PowerShellの合計がエクスプローラーのプロパティと合わない | 隠しファイル、アクセス拒否、再解析ポイント、ハードリンク、論理サイズとディスク上のサイズの違いが考えられます。 | -Force の有無とエラー出力を確認し、論理バイトかディスク上の使用量か、比較している指標をそろえます。 |
| 大きなフォルダの計測に時間がかかる、または止まったように見える | すべてのサブフォルダとファイルを列挙するため、ネットワーク共有、多数の小ファイル、低速ディスクでは時間がかかります。 | 小さいサブフォルダでコマンドを確認し、対象を絞るか、Sysinternals Duで階層深度を指定します。 |
安全な対処手順
1. まず「サイズ」の意味を決める
フォルダサイズには、各ファイルの論理的な長さを合計した値と、圧縮、スパースファイル、クラスター単位、ハードリンクなどを反映したディスク上の使用量があります。dirと一般的なPowerShell集計は主にファイルのLength合計を確認する方法です。ディスク上の占有量まで比較したい場合は、Sysinternals DuのDirectorySizeOnDiskを利用できるCSV出力が向いています。
- バックアップ対象の総データ量なら論理サイズを確認します。
- 空き容量不足の調査ならディスク上の使用量も確認します。
- 同じ指標、同じ権限、同じ時点で比較します。
注意:計測中にファイルが増減すると、複数の方法で結果が一致しないことがあります。
2. コマンドプロンプトのdirで合計バイトを確認する
コマンドプロンプトを開き、対象パスを引用符で囲んで dir /a /s /-c を実行します。/s はサブフォルダを含め、/a は隠し・システム属性を含む項目を表示し、/-c は数値の桁区切りを外します。最後に表示されるファイル数と累積バイトが対象ツリーの合計です。画面が長い場合はファイルへリダイレクトして末尾を確認できます。
- 空白を含むパスは必ず引用符で囲みます。
- 最後の全体集計と、途中の各フォルダ集計を取り違えないようにします。
- アクセス拒否が表示されたフォルダの中身は合計に含まれません。
dir /a /s /-c "C:\Data"
dir /a /s /-c "C:\Data" > "C:\Temp\dir-size.txt"
注意:出力の「File(s)」をfindで抽出する例は表示言語に依存します。日本語Windowsと英語Windowsの両方で動かすバッチでは、文字列固定の解析を避けてください。
3. PowerShellで合計をGiB表示する
PowerShellでは、ファイルだけを再帰列挙し、Lengthプロパティを合計できます。-LiteralPath を使うと角括弧などを含むパスをワイルドカードとして誤解しにくく、-Force で隠し項目も対象にできます。ただしForceはセキュリティ制限を回避しません。エラーが出た項目は合計から漏れるため、メッセージを無視せず確認してください。
-Fileでフォルダオブジェクトを除外します。-Recurseで配下を列挙します。Measure-Object -Property Length -Sumで論理バイトを合計します。- PowerShell 7は既定でディレクトリのシンボリックリンク先へ再帰しません。
$bytes = 0 + (Get-ChildItem -LiteralPath "C:\Data" -File -Recurse -Force -ErrorAction Continue | Measure-Object -Property Length -Sum).Sum
"{0:N2} GiB ({1:N0} bytes)" -f ($bytes / 1GB), $bytes
注意:-ErrorAction SilentlyContinue だけを付けるとアクセス拒否を見落とし、少ない値を正しい合計だと誤認しやすくなります。
4. Sysinternals Duで階層別とディスク上の使用量を調べる
Microsoft SysinternalsのDuは、指定ディレクトリの使用量を再帰的に集計する公式ツールです。単純な合計は対象パスだけを指定し、直下のサブフォルダ比較には -l 1 を使います。CSV出力ではDirectorySizeとDirectorySizeOnDiskを分けて取得できるため、論理サイズと実使用量の差を調べる用途にも向きます。
- Microsoft Sysinternals公式ページから取得します。
-nobannerでバナーを省きます。-l 1で直下階層までの内訳を確認します。- ハードリンクを各出現ごとに数える必要がある場合だけ
-uの意味を確認して使います。
du.exe -nobanner "C:\Data"
du.exe -nobanner -l 1 "C:\Data"
du.exe -nobanner -c "C:\Data"
注意:LinuxやWSLのduと同名ですが、Sysinternals Duはオプションと出力形式が異なります。混同しないでください。
5. WSLのduは既にWSLを使っている場合だけ選ぶ
WSLが導入済みなら、Windowsドライブを /mnt/c などのパスで参照し、Linuxの du -sh を使えます。WSL未導入のPCでフォルダ容量を見るだけなら、管理者PowerShellで wsl --install を実行してUbuntuを追加し再起動するより、dir、PowerShell、Sysinternals Duの方が軽量です。
- 既存WSL環境ではWindowsパスをLinux形式へ読み替えます。
- 空白を含むLinuxパスは引用符で囲みます。
- WSLのマウントと権限のため、Windows側ツールと値が異なる場合があります。
wsl du -sh /mnt/c/Data
wsl du -sh "/mnt/c/Users/name/My Folder"
注意:wsl --install はオプション機能と既定のLinuxディストリビューションを追加し、再起動を求めることがあります。容量確認だけを目的に安易に実行しません。
各フォルダの容量を一覧表示:直下の内訳を比較する
「C:\Data全体が何バイトか」と「C:\Data直下のどのフォルダが大きいか」は別の確認です。dir /sの途中に出る各ディレクトリの集計は、そのディレクトリ直下のファイル分です。配下を含んだ各フォルダの容量を比較したい場合、次の方法を選びます。
| 方法 | 確認できる内容 |
|---|---|
| dir /a /s /-c | 最後に指定ツリー全体の論理ファイルサイズ合計を確認。途中の各ディレクトリ合計と区別。 |
| Sysinternals Du -l 1 | 直下階層までのフォルダ内訳を表示。各フォルダ配下を含む使用量を比較。 |
| PowerShellのフォルダ別集計 | 各直下サブフォルダについて、配下のファイルのLengthを再帰合計して並べる。 |
単一ファイルのサイズやdir出力の基本はフォルダやファイルのサイズを確認する方法を参照してください。ここでは大きいフォルダを特定するための内訳を扱います。
Duで深さ1のCSVを出す
Microsoft Sysinternals Duは既定で配下を再帰集計します。-lは内訳を表示する深さで、走査する配下を深さ1だけに制限する指定ではありません。CSVなら次のように出力できます。実行時は取得したdu.exeのあるフォルダ、またはその完全なパスを使ってください。
du.exe -nobanner -c -l 1 "C:\Data"
CSVのDirectorySizeは配下を含むサイズ、DirectorySizeOnDiskはディスク上の使用量です。CurrentFileSizeは当該ディレクトリ直下のファイル分です。親フォルダと子フォルダのDirectorySizeを全部足すと、同じデータを重ねて数えるため、親の総量と同階層の内訳を分けて見てください。
PowerShell 7で直下サブフォルダごとの論理サイズを並べる
次は直下にある通常のサブフォルダを対象に、配下のファイルの長さを合計する例です。対象パスは存在するフォルダへ変更します。初めに列挙する直下フォルダでは再解析ポイントを除外し、PowerShell 7ではリンク先をたどるFollowSymlinkを指定しません。エラーが発生した行には件数を表示します。
$sizeRoot = 'C:\Data'
Get-ChildItem -LiteralPath $sizeRoot -Directory -Force -Attributes !ReparsePoint -ErrorAction Stop |
ForEach-Object {
$sizeFolder = $_
$sizeErrors = @()
$sizeBytes = 0 + (Get-ChildItem -LiteralPath $sizeFolder.FullName -File -Recurse -Force -ErrorAction Continue -ErrorVariable +sizeErrors |
Measure-Object -Property Length -Sum).Sum
[pscustomobject]@{
Folder = $sizeFolder.FullName
Bytes = $sizeBytes
GiB = [math]::Round($sizeBytes / 1GB, 3)
ReadErrors = $sizeErrors.Count
}
} | Sort-Object Bytes -Descending | Format-Table -AutoSize
上の例はGet-ChildItemの再帰・隠し項目・リンクの仕様と、Measure-ObjectのSumを組み合わせたものです。GiBは1024の3乗バイトで表示します。ReadErrorsが0でない行は読み取れない項目を含み、完全な合計ではありません。Forceでもアクセス権は回避できません。
一覧に対象ルート直下のファイルは含めていません。ルート直下にも大きいファイルがある場合、フォルダ別の行を足した値と全体合計は一致しません。また論理サイズはハードリンクを名前ごとに数える場合があり、クラウドのオンライン専用ファイルや圧縮ファイルのディスク使用量とは異なります。
よくある質問
tree /fでフォルダサイズを確認できますか?
できません。Microsoftの仕様では、treeはディレクトリ構造を表示し、/f は各ディレクトリ内のファイル名を追加表示するオプションです。ファイルサイズの合計は表示しないため、dir /s、PowerShell、またはSysinternals Duを使ってください。
dir /sとPowerShellの結果が違うのはなぜですか?
隠し・システム項目を含めたか、アクセス拒否があったか、再解析ポイントやシンボリックリンクをたどったか、計測中にファイルが変化したかを確認します。dirでは /a、PowerShellでは -Force を付けてもアクセス権は越えられません。両方のエラー表示を確認して比較してください。
フォルダのプロパティとコマンド結果のどちらが正しいですか?
どちらも条件によって正しい可能性があります。ファイルのLength合計とディスク上の占有量は、圧縮、スパースファイル、ハードリンク、クラスターサイズにより一致しません。何を判断したいかを決め、論理サイズならPowerShell、占有量も含めるならSysinternals DuのCSV出力など、指標を明示して使います。
公式情報
コマンドのオプションと集計条件は、次のMicrosoftの仕様を参照してください。
- Microsoft Learn: dir command reference
- Microsoft Learn: tree command reference
- Microsoft Learn: Get-ChildItem
- Microsoft Learn: Measure-Object
- Microsoft Sysinternals: Disk Usage (Du)
- Microsoft Learn: Install WSL
まとめ
フォルダ全体の合計はdir /sの最後の集計、各フォルダの内訳はDu -lやPowerShellのフォルダ別集計で確認します。比べるときは論理サイズとディスク上の使用量をそろえ、隠し項目、リンク、アクセス拒否、計測中のファイル変更も確認してください。容量が大きいという理由だけで、内容を確認せず削除しないようにしましょう。



コメント