删除文件前删除项目?

时间:2013-11-21 04:45:09

标签: powershell powershell-v2.0 delete-file

在PowerShell中,我相信我观察到PowerShell在删除其内容之前试图删除文件夹。我正在使用的命令是Remove-Item

过去,与-recurse一起使用会偶尔错误地抱怨该目录不是空的。当我看到那个错误时,我会在检查时发现目标目录为空。我最好的猜测是,当文件仍在被删除的过程中,它正在继续前进。现在我看到了更多的证据。

由于上述原因,我试图使用以下代码段:

$toDelete = Get-ChildItem $path -Recurse
[Array]::Reverse($toDelete)
$toDelete | Remove-Item
Remove-Item $path

我现在得到的是以下提示:

Confirm
The item at [path to directory] has children and the Recurse parameter was not specified. If you continue, all
children will be removed with the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

再次检查时,目录为空。我最好的猜测是$toDelete | Remove-Item在实际删除文件之前返回,并且我在Remove-Item $path上看到此提示。

这是一个已知问题吗?我怀疑发生了什么问题?我该如何解决它?

我尝试使用cmd /C "rd /S [path to directory]",但这是有问题的,因为我发现退出代码是0,因为它无法删除一些正在使用的子代。 (这是我使用的潜在情况,我需要它是一个错误情况。)

1 个答案:

答案 0 :(得分:2)

使用-Recurse开关的Remove-Item在V1-V3中有错误(实际上它告诉你它在帮助中无法正常工作)。 它在V4中被修复(最后)。我已经使用这种方法作为解决方法,它总是对我有用:

$toDelete = Get-ChildItem $path -Recurse |
 select -expand property fullname |
 sort -length descending |
 Remove-Item
Remove-Item $path