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

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


当前回答

Remove-Item -Recurse -Force some_dir

确实像广告上说的那样有效。

rm -r -fo some_dir

速记别名也有用吗?

据我所知,当您尝试递归删除一组过滤过的文件时,-Recurse参数不能正确工作。杀死一个单一的目录和下面的一切似乎工作得很好。

其他回答

$users = get-childitem \\ServerName\c$\users\ | select -ExpandProperty name

foreach ($user in $users)

{
remove-item -path "\\Servername\c$\Users\$user\AppData\Local\Microsoft\Office365\PowerShell\*" -Force -Recurse
Write-Warning "$user Cleaned"
}

写上面的清理一些日志文件而不删除父目录,这工作完美!

使用老式的DOS命令:

rd /s <dir>
Remove-Item -Recurse -Force some_dir

确实像广告上说的那样有效。

rm -r -fo some_dir

速记别名也有用吗?

据我所知,当您尝试递归删除一组过滤过的文件时,-Recurse参数不能正确工作。杀死一个单一的目录和下面的一切似乎工作得很好。

rm -r ./folder -Force    

...为我工作

受上面@john-rees的启发,我采取了另一种方法——尤其是当他的方法在某种程度上开始对我失败时。基本上递归的子树和排序文件的路径长度-删除从最长到最短

Get-ChildItem $tfsLocalPath -Recurse |  #Find all children
    Select-Object FullName,@{Name='PathLength';Expression={($_.FullName.Length)}} |  #Calculate the length of their path
    Sort-Object PathLength -Descending | #sort by path length descending
    %{ Get-Item -LiteralPath $_.FullName } | 
    Remove-Item -Force

关于-LiteralPath魔法,这里有另一个可能困扰你的问题:https://superuser.com/q/212808