如何使用PowerShell 2.0递归删除整个目录?
在PowerShell中强制删除目录及其所有子目录的最简单方法是什么? 我在Windows 7中使用PowerShell V2。
我从几个来源得知,最明显的命令Remove-Item $targetDir -Recurse -Force
不能正常工作。 这包括PowerShell V2联机帮助(使用Get-Help Remove-Item -Examples
)中的声明,其中声明:
...由于此cmdlet中的Recurse参数有问题,该命令使用Get-Childitem cmdlet获取所需的文件,并使用管道运算符将它们传递给Remove-Item cmdlet ...
我看到了各种使用Get-ChildItem并将其传递给Remove-Item的示例,但这些示例通常会根据筛选器删除一些文件,而不是整个目录。
我正在寻找最干净的方式来吹掉整个目录,文件和子目录,而不会使用最少量的代码生成任何用户警告消息。 如果易于理解的话,单线可以很好。
Remove-Item -Recurse -Force some_dir
确实按照这里所宣传的那样工作。
rm -r -fo some_dir
简写别名也可以起作用。
据我了解,当您尝试递归删除一组经过滤的文件时, -Recurse
参数无法正常工作。 为了杀死一个目录和下面的所有内容,似乎工作正常。
我用了:
rm -r folderToDelete
这对我来说就像一个魅力(我从Ubuntu偷了它)。
使用简单的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
链接地址: http://www.djcxy.com/p/29103.html
上一篇: How to recursively delete an entire directory with PowerShell 2.0?