При рекурсивном удалении файлов с использованием простого Remove-Item "folder" -Recurse
иногда я вижу периодически возникающую ошибку: [folder] cannot be removed because it is not empty.
Этот ответ пытается предотвратить эту ошибку путем индивидуального удаления файлов.
function Get-Tree($Path,$Include='*') {
@(Get-Item $Path -Include $Include -Force) +
(Get-ChildItem $Path -Recurse -Include $Include -Force) |
sort pspath -Descending -unique
}
function Remove-Tree($Path,$Include='*') {
Get-Tree $Path $Include | Remove-Item -force -recurse
}
Remove-Tree some_dir
Важной деталью является сортировка всех элементов с pspath -Descending
, так что листья удаляются перед корнями. Сортировка выполняется по параметру pspath
, поскольку у него больше шансов работать для поставщиков, отличных от файловой системы. Параметр -Include
удобен, если вы хотите отфильтровать элементы для удаления.
Он разделен на две функции, так как я считаю полезным увидеть, что я собираюсь удалить, запустив
Get-Tree some_dir | select fullname