ストレージ内で容量を沢山使っているフォルダを探そうと思いスクリプトを考えてみました。
フォルダを指定して取得
(Get-ChildItem "H:\" -File | measure -Sum -Property Length).Sum
H:\直下のファイルのみが対象となります。サブフォルダのファイルは含まれません。
エクスプローラーでファイルを選択するとステータスバーに選択したファイルの個数と合計サイズが表示されます。単位がKBなのでPowerShellの結果を1024で割ると概ね同じ数値であることが確認出来ます。
サブフォルダを再帰的に取得
Get-ChildItem "D:\" -Directory -Recurse | % { [PsCustomObject]@{"FullPath"=$_.FullName;"Size"=(Get-ChildItem $_.FullName -File | measure -Sum -Property Length).Sum} } | Sort-Object -Property Size -Descending | Format-Table
結果
FullPath Size
-------- ----
H:\asp
H:\backup 3635
H:\Books 123029040
H:\csharp 154873
H:\download
H:\git
あとは、Sizeで並べ替えて大きなフォルダを探せばよいはず。
文字でグラフのようなものを付加
$l =Get-ChildItem "H:\" -Directory | % { [PsCustomObject]@{"FullPath"=$_.FullName;"Size"=(Get-ChildItem $_.FullName -File | measure -Sum -Property Length).Sum} }
$m = $l | measure -Max -Min -Property Size
$l | % { [PSCustomObject]@{"FullPath"=$_.FullPath; "Size"=$_.Size; "Graph" = ("*" * [int]($_.Size / ($m.Maximum) * 10))} } | Sort-Object -Property Size -Descending
結果
code>FullPath Size Graph -------- ---- ----- H:\tools 207424585 ********** H:\Books 123029040 ****** H:\py 84993879 **** H:\Pictures 12725418 * H:\text 6694371 H:\sh 4556475 H:\ps1 2462571 H:\json 419119 H:\php 340062 H:\csharp 154873 H:\memo 31349 H:\html 19956 H:\md 13806 H:\key 13170 H:\sqlite 4827 H:\backup 3635 H:\javascript 2100 H:\workspace 12 H:\download H:\asp H:\git H:\kotlin H:\src
数値だけだと認識しずらいかと思いましたが、Sizeで並べ替えるだけで、グラフはいらない感じです。
ChatGPTに「PowerShellフォルダ内のファイルサイズの合計を取得するサンプルを書いて」と質問してみる
以下がPowerShellでフォルダ内のファイルサイズの合計を取得するサンプルスクリプトです。
$folder = 'C:\Example' $size = 0 Get-ChildItem $folder -Recurse | ForEach-Object { $size += $_.Length } Write-Host "Total size of files in $folder: $($size/1MB) MB"
ここで、「C:\Example」はフォルダのパスです。 合計サイズはMB単位で表示されます。
ChatGPTより引用
コメント