У меня есть сценарий PowerShell 2.0, который я использую для удаления папок, в которых нет файлов:
dir 'P:\path\to\wherever' -recurse | Where-Object { $_.PSIsContainer } | Where-Object { $_.GetFiles().Count -eq 0 } | foreach-object { remove-item $_.fullname -recurse}
Однако я заметил, что при запуске скрипта было множество ошибок. А именно:
Remove-Item : Directory P:\path\to\wherever cannot be removed because it is not empty.
«ЧТО?!» Я запаниковал. Они должны все быть пустыми! Я фильтрую только для пустых папок! Видимо, не совсем так, как работает скрипт. В этом сценарии папка, в которой есть только дочерние папки, но файлы внуков, считается пустой:
Folder1 (no files - 1 folder) \ Folder 2 (one file)
В этом случае PowerShell видит папку Folder1 как пустую и пытается удалить ее. Причина, по которой меня это озадачивает, заключается в том, что если я щелкну правой кнопкой мыши на Folder1 в проводнике Windows, он скажет, что в Folder1 есть 1 папка и 1 файл. Все, что используется для вычисления дочерних объектов под Folder1 из Проводника, позволяет ему видеть объекты внуков до бесконечности.
Вопрос:
Как я могу сделать так, чтобы в моем скрипте папка не считалась пустой, если в нем есть файлы внуков или старше?