我编写了一个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
如何编辑脚本以实现此目的?
答案 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
不提供这种过滤机制。