在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的各种示例,但这些示例通常基于过滤器删除一些文件集,而不是整个目录。

我正在寻找最干净的方法来吹出整个目录,文件和子目录,而不生成任何用户警告消息使用最少的代码量。如果简单易懂,那么一行代码最好。


当前回答

rm -r ./folder -Force    

...为我工作

其他回答

在Windows上,Remove-Item -Force -Recurse可能会间歇性失败,因为底层文件系统是异步的。这个答案似乎解决了这个问题。该用户还积极参与GitHub上的Powershell团队。

试试这个例子。如果目录不存在,则不会引发错误。您可能需要PowerShell v3.0。

remove-item -path "c:\Test Temp\Test Folder" -Force -Recurse -ErrorAction SilentlyContinue
del <dir> -Recurse -Force # I prefer this, short & sweet

OR

remove-item <dir> -Recurse -Force

如果你有一个很大的目录,那么我通常会做的是

while (dir | where name -match <dir>) {write-host deleting; sleep -s 3}

在另一个powershell终端上运行,当它完成时,它将停止。

rm -r ./folder -Force    

...为我工作

要删除包括文件夹结构在内的完整内容使用

get-childitem $dest -recurse | foreach ($_) {remove-item $_.fullname -recurse}

在remove-item中添加的-递归确保交互式提示被禁用。