年末の大掃除ということでPCのフォルダの整理をしていました。容量の大きなフォルダを削除しようと思い、Powershellでフォルダごとに再帰的に容量を計算して一覧表示するスクリプトを作りました。スクリプト作りはChatGPTに助けてもらいました。
#Powershell
$size = Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum
$sizeMB = [math]::Round($size.Sum / 1MB, 2)
おおむね想定通りに動作したのですが、明らかに容量がゼロではないのに容量がゼロとして認識されてしまうフォルダがあることがわかりました。それらのフォルダの共通点としては、フォルダ名に大かっこ [] が含まれていることでした。
私はフォルダの作成日やメモ書きの際に大かっこをフォルダ名に使うことがあるのですが、調べてみると大かっこはPowershellの処理ではワイルドカードの扱いになってしまいます。
[Microsoft Learn]
文字の範囲[a-z]や特定文字に一致[abc]という条件の際に使用されます。
上記のナレッジの下のほうに書いてありますが、いくつかの方法でワイルドカード文字をエスケープして、普通の文字のように取り扱うことが可能です。
今回は-Literalpathパラメータを追加してエスケープすることにしました。
#Powershell
$size = Get-ChildItem -LiteralPath $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum
$sizeMB = [math]::Round($size.Sum / 1MB, 2)
これはパラメータを追加するだけなので簡単です。ただ、そもそものところでプログラムがワイルドカードとして認識するような文字をフォルダ名に使う習慣をやめたほうがいいのかもしれません。












