【发布时间】:2015-04-22 06:37:25
【问题描述】:
我需要递归删除 PowerShell 中特定文件夹的所有空文件夹(检查任何级别的文件夹和子文件夹)。
目前我使用这个脚本没有成功。
你能告诉我如何解决它吗?
$tdc='C:\a\c\d\'
$a = Get-ChildItem $tdc -recurse | Where-Object {$_.PSIsContainer -eq $True}
$a | Where-Object {$_.GetFiles().Count -eq 0} | Select-Object FullName
我在 Windows 8.1 版本上使用 PowerShell。
【问题讨论】:
-
在我看来,您唯一缺少的就是实际删除文件夹。添加了 -WhatIf...
$a | Where-Object {$_.GetFiles().Count -eq 0} | select -expand FullName | remove-item -whatif -
感谢您的评论,但是使用您的代码,我得到一个弹出窗口说...有孩子并且没有指定 Recurse 参数。我需要它避免这个警告。
-
Remove-Item -Recurse应该可以解决问题。但是,如果文件夹~\a\b和子文件夹~\a\b\c中没有文件,您将收到一条错误消息,指出在为~a\b\c运行$_.GetFiles()-part 时找不到路径,即如果~\a\b已被删除,则为 true。 -
这就是 powershell 再次荒谬的地方。为此有一个 ISO 标准 C 函数:rmdir。这是 Windows 平台上的实现(作为 OP 标记的 Windows):docs.microsoft.com/en-us/cpp/c-runtime-library/reference/…。诸如再次列出每个目录内容以检查其空目录是否在性能方面真的很差的解决方法。
-
我在这里遇到了很多问题。请,如果您使用
.FullName,请使用 Get-ChildItem 的 -LiteralPath !!!