无法定位嵌套在可能多次存在的顶级文件夹中的子文件夹

问题描述 投票:0回答:1

我尝试过多种变体,我尝试过CrapGPT,我尝试过组合和拼凑东西,但就是无法得到我想要的结果。

本质上,我想做的是仅列出顶级文件夹 ParentFolder 中的所有子文件夹,然后在所有子文件夹中搜索两个特定文件夹 targetfolder1 和 targetfolder2 并列出这些目标子文件夹中的所有子文件夹。然后我想将该列表转储到 .csv。

所以本质上它看起来像:

# First, list only the level 0 subfolders
Z:\ParentFolder
Z:\Parentfolder\Subfolder1
Z:\Parentfolder\Subfolder2
Z:\Parentfolder\Subfolder3
...

# Then, list all the level X subfolders that fall only within targetfolder1 and targetfolder2
Z:\Parentfolder\Subfolder1\Sub-subfolder1\targetfolder1
Z:\Parentfolder\Subfolder1\Sub-subfolder2\Sub-sub-subfolder1\targetfolder1
Z:\Parentfolder\Subfolder1\Sub-subfolder3\Sub-sub-subfolder2\targetfolder1
Z:\Parentfolder\Subfolder1\Sub-subfolder3\Sub-sub-subfolder2\targetfolder2
Z:\Parentfolder\Subfolder1\Sub-subfolder4\Sub-sub-subfolder3\sub-sub-sub-subfolder1\targetfolder1
...

因此,父文件夹中的任何子文件夹可能有也可能没有 targetfolder1 或 targetfolder2,但如果有的话,它们可能与其他子文件夹处于同一子文件夹级别,也可能不处于同一子文件夹级别。因此,如果文件夹名称与 targetfolder1 或 targetfolder2 匹配,则仅列出这些相应目标文件夹中的所有目录。

我最终停下来的是:

$parentfolder = "Z:\ParentFolder"

$results = @()
$parentfolder = Get-ChildItem -Path $folder -Depth 0 -Directory -ErrorAction SilentlyContinue
$results += $parentfolder

$targetsubfolders = Get-ChildItem $folder -Recurse | Where-Object {$_.Name -match "targetfolder1" -or $_.Name -match "targetfolder2"} | Select-Object Name
$results += $targetsubfolders

$results | Select-Object FullName | Export-Csv "C:\Users\User\Desktop\results.csv" -NoTypeInformation

我已经盯着这个看了很久了,一切都不再有意义了。非常感谢您的见解。

powershell search directory subdirectory
1个回答
0
投票

您的代码问题似乎是

Select-Object Name
,然后尝试
Select-Object FullName
。由于前面的陈述,这些对象不再具有
.FullName
属性。 应该将其删除

您还可以利用此处的管道:

$parentfolder = 'Z:\ParentFolder'

# `-Depth 0` is default here, no need for it
# get folders one level down
Get-ChildItem -Path $parentfolder -Directory -ErrorAction SilentlyContinue |
    # get all child folders recursively
    Get-ChildItem -Directory -Recurse |
    # filter for folders where their name is 'targetfolder1' or 'targetfolder2'
    Where-Object Name -In 'targetfolder1', 'targetfolder2' |
    Select-Object FullName |
    Export-Csv 'C:\Users\User\Desktop\results.csv' -NoTypeInformation
© www.soinside.com 2019 - 2024. All rights reserved.