忽略包含大量目录的文件夹

时间:2018-11-16 10:29:14

标签: powershell

我编写了一个PowerShell脚本,该脚本遍历目录并捕获嵌套在其中的文件夹名称列表。它使用以下循环来实现这一目标

Get-ChildItem -Path $targetPath -Directory -Recurse |
    Select-Object -ExpandProperty "Fullname" |
    ForEach-Object {
        #log folder name
    }

但是,我希望脚本跳过目录中嵌套了一定数量的文件夹的目录。

例如,在以下示例中,我不想捕获“文件夹C”,因为它嵌套了3个以上的文件夹。

Folder A/Folder AA
Folder A/Folder AB
Folder B/Folder BA
Folder C/Folder CA #DO NOT CAPTURE
Folder C/Folder CB #DO NOT CAPTURE
Folder C/Folder CC #DO NOT CAPTURE
Folder C/Folder CD #DO NOT CAPTURE
Folder D

所以我希望我的脚本输出是

Folder A/Folder AA
Folder A/Folder AB
Folder B/Folder BA
Folder D

如何编辑脚本以实现此目的?

1 个答案:

答案 0 :(得分:2)

如果您只想排除顶层文件夹,则可以执行以下操作:

Get-ChildItem -Path $targetPath -Directory | Where-Object {
    (Get-ChildItem $_.FullName -Directory).Count -le 3
} | ForEach-Object {
    Get-ChildItem $_.FullName -Directory -Recurse
} | Select-Object -Expand Fullname

如果要排除包含三个以上子文件夹的任何(子)文件夹,则必须自己实现递归。 Get-ChildItem不提供这种过滤机制。