gpt4 book ai didi

windows - PowerShell:查找并删除其中或子文件夹中没有文件的文件夹

转载 作者:可可西里 更新时间:2023-11-01 14:43:05 28 4
gpt4 key购买 nike

我有一个 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.

“什么?!” 我 panic 。它们应该全部 是空的!我只过滤空文件夹!显然这不是脚本的工作方式。在这种情况下,只有文件夹作为子文件夹,但文件作为孙文件夹的文件夹被认为没有文件:

Folder1 (no files - 1 folder) \ Folder 2 (one file)

在这种情况下,PowerShell 将 Folder1 视为空并尝试将其删除。这让我感到困惑的原因是,如果我在 Windows 资源管理器中右键单击 Folder1,它会说 Folder1 中有 1 个文件夹和 1 个文件。无论用于从 Explorer 中计算 Folder1 下的子对象,它都可以无限地查看孙对象。

问题:

如果我的脚本有文件作为孙子或其他文件,我怎样才能让我的脚本不认为该文件夹为空?

最佳答案

这是我在最近的脚本中使用的递归函数...

function DeleteEmptyDirectories {
param([string] $root)

[System.IO.Directory]::GetDirectories("$root") |
% {
DeleteEmptyDirectories "$_";
if ([System.IO.Directory]::GetFileSystemEntries("$_").Length -eq 0) {
Write-Output "Removing $_";
Remove-Item -Force "$_";
}
};
}

DeleteEmptyDirectories "P:\Path\to\wherever";

关于windows - PowerShell:查找并删除其中或子文件夹中没有文件的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7034466/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com