2013-11-21 32 views
3

在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,因为当它删除一些正在使用的孩子时失败。 (这是我的使用潜在的情况,我需要它是一个错误的情况。)

回答

2

带-Recurse开关的Remove-Item在V1-V3中有问题(它实际上告诉你它不能正常工作在帮助中)。 它最终在V4中得到修复。我已经使用这种方法作为解决方法,它总是对我有效:

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

是的,我在帮助中看到。该帮助明确指出,它与'-Include'和'-Recurse'之间的相互作用有关,不过我并没有这样做。有趣。您将输出捕获到一个变量中。想想看,我认为我抓住了一些其他的东西,以防止剧本在命令完成之前继续前进。我会尝试一下并报告。 – jpmc26

+0

我不认为这实际上是在V4中修复的。我仍然看到问题。 – jpmc26