空のフォルダーをサブフォルダーごと削除するWindows PowerShellスクリプト
システムを運用していく中で、あるいは個人のPCで、定期的に空のフォルダーを削除したい場合、意外に面倒だ。フォルダーの階層が浅ければ何とかなるが、深い階層のフォルダーをひとつひとつ見ていくのは手間だ。そこでWindows PowerShellを使って空フォルダーだけを削除するスクリプトを組んでおくと楽になる。
空のフォルダーの中にサブフォルダーしかない場合は削除したいが、ひとつでもファイルがある場合はそのフォルダーだけは残したい。そんなときにGet-ChildItemで渡されるオブジェクトがDirectoryInfoであることでフォルダーと判断し、さらにはGetFilesメソッドでファイルの件数を見て0件だったら削除する。
不安な場合はRemove-Itemに-WhatIfをつけて一度実行してみて、どのフォルダーが削除されるのかを確認してから-WhatIfを消して実行するといいだろう。
C:
Set-Location C:Work
Get-ChildItem -Recurse | Where-Object { $_.GetType().Name -eq "DirectoryInfo" -and $_.GetFiles().Count -eq 0 } | Remove-Item -Recurse