【发布时间】:2026-02-10 18:10:01
【问题描述】:
我有一个 PowerShell 2.0 脚本,用于删除其中没有文件的文件夹:
dir 'P:\path\to\wherever' -recurse | Where-Object { $_.PSIsContainer } | Where-Object { $_.GetFiles().Count -eq 0 } | foreach-object { remove-item $_.fullname -recurse}
但是,我注意到运行脚本时出现大量错误。即:
Remove-Item : Directory P:\path\to\wherever cannot be removed because it is not empty.
“什么?!”我惊慌失措。它们应该全部为空!我只过滤空文件夹!显然这不是脚本的工作方式。在这种情况下,只有文件夹作为子文件夹,而文件作为孙文件夹的文件夹被认为是空的:
Folder1 (no files - 1 folder) \ Folder 2 (one file)
在这种情况下,PowerShell 将 Folder1 视为空并尝试将其删除。这让我感到困惑的原因是,如果我在 Windows 资源管理器中右键单击 Folder1,它会说 Folder1 中有 1 个文件夹和 1 个文件。无论是用于从 Explorer 中计算 Folder1 下的子对象,它都可以无限地查看孙对象。
问题:
如果我的脚本有文件作为孙子或以后的文件,我怎样才能让我的脚本不认为文件夹为空?
【问题讨论】:
标签: windows powershell powershell-2.0