在PowerShell中强制删除目录及其所有子目录的最简单方法是什么?我在Windows 7中使用PowerShell V2。
我从几个来源了解到,最明显的命令,Remove-Item $targetDir -Recurse -Force,不能正确工作。这包括PowerShell V2在线帮助中的语句(使用Get-Help Remove-Item -Examples找到),声明:
...因为这个cmdlet中的递归参数是错误的,该命令使用get - childitem cmdlet来获取所需的文件,并使用管道操作符将它们传递给Remove-Item cmdlet…
我见过使用Get-ChildItem并将其输送到remove - item的各种示例,但这些示例通常基于过滤器删除一些文件集,而不是整个目录。
我正在寻找最干净的方法来吹出整个目录,文件和子目录,而不生成任何用户警告消息使用最少的代码量。如果简单易懂,那么一行代码最好。
当使用简单的删除项“文件夹”递归删除文件时,我有时会看到一个间歇性错误:[文件夹]不能删除,因为它不是空的。
这个答案试图通过单独删除文件来防止该错误。
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 - descent对所有项进行排序,以便在根项之前删除叶项。排序是在pspath参数上完成的,因为它更有可能用于提供程序而不是文件系统。如果您想筛选要删除的项,则-Include参数只是一种方便。
它分为两个函数,因为我发现它可以通过运行来查看我将要删除的内容
Get-Tree some_dir | select fullname