PowerShellで空のフォルダーを探す場合、「そのフォルダー直下に何もない」と「配下のどの階層にもファイルがない」を区別します。まず候補をCSVで確認し、削除操作は実施しません。
空フォルダと空ファイルの違い
フォルダーの中身が完全に空なのか、ファイルはないが子フォルダーだけ残っているのかを決めます。例えばC:\Work\Aの中に空のBがある場合、Aは直下に項目があるので「完全に空」ではありません。一方、A配下にファイルが1つもないという意味では「ファイルなし」です。運用目的によって対象が変わります。
直下だけ・配下全体の判定を区別
「直下にファイルもフォルダーも存在しない」ディレクトリを探す例です。
$root = 'C:\Work\Archive'
$dirs = @(Get-ChildItem -LiteralPath $root -Directory -Recurse -ErrorAction Stop)
$empty = foreach ($dir in $dirs) {
if (-not (Get-ChildItem -LiteralPath $dir.FullName -Force -ErrorAction Stop |
Select-Object -First 1)) { $dir }
}
$empty | Select-Object FullName |
Export-Csv -LiteralPath '.\empty_folders.csv' -NoTypeInformation -Encoding UTF8
対象配下の隠し項目も判定に含めるため-Forceを指定しています。アクセス権が足りないフォルダーを「空」と判定しないようにします。
一覧をCSVに出して持ち主へ確認
配下全体にファイルがないフォルダーを探したい場合は、対象フォルダーごとにGet-ChildItem -File -Recurseでファイルの有無を確認します。ただし多数のフォルダーへ毎回再帰を行うと遅くなるため、大規模な共有ドライブでは最初に一覧をまとめて取得する方式を検討します。今回は誤削除を防ぐため、直下完全空だけを対象にします。
削除操作を別工程に分ける
作成したCSVを開き、業務アプリが使う空フォルダー、処理途中の一時フォルダー、監査上残すべきフォルダーがないか担当者へ確認します。空フォルダーはシステムの出力先として意図的に作られていることもあります。削除する場合でも、一覧のレビューを終えてから別の承認工程を用意してください。
