0

我可以使用 Get-ChildItem -Recurse 递归搜索目录。但没有得到预期的输出。也试过-深度。但没有运气。

文件夹结构如下:

C:\Users\Documents\Azure\repo\Templates\directory*

directory1-uat --> childdir1 --> childdir2 --> a.parameters.json

directory2-dev --> childdir1 --> childdir2 --> b.parameters.json

directory3-nonprod --> childdir1 --> childdir2 --> c.parameters.json

directory4-test --> childdir1 --> childdir2 --> d.parameters.json

directory5-uat --> childdir1 --> childdir2 --> e.parameters.json

我尝试了以下方法:


    $repo = 'C:\Users\Documents\Azure'
    $subDirs = Get-ChildItem -Path "$repo\Templates\*\" -Depth 0 -Directory | Where-Object fullname -notlike "*_Templates*"
    $subDirs
    ForEach ($subDir in $subDirs) {
        $subDir
        $envTag = $subDir.Name.split('-')[1]
        $envTag
        $subParamFiles = Get-ChildItem -Path $subDir.PSParentPath -Recurse -File -Include "*parameters.json"
        $subParamFiles
    }

输出是:


    d-----         02-Jan-20  8:48 PM                directory1-uat
    uat
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json
    d-----         02-Jan-20  8:48 PM                directory2-dev
    dev
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json
    d-----         02-Jan-20  8:48 PM                directory3-nonprod
    nonprod
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json
    d-----         02-Jan-20  8:48 PM                directory4-test
    test
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json
    d-----         02-Jan-20  8:48 PM                directory5-uat
    uat
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json

预期输出:


    d-----         02-Jan-20  8:48 PM                directory1-uat
    uat
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    d-----         02-Jan-20  8:48 PM                directory2-dev
    dev
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    d-----         02-Jan-20  8:48 PM                directory3-nonprod
    nonprod
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    d-----         02-Jan-20  8:48 PM                directory4-test
    test
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    d-----         02-Jan-20  8:48 PM                directory5-uat
    uat
    -a----         02-Jan-20  8:48 PM                e.parameters.json

4

2 回答 2

2

您正在打印$subDir- 在第一种情况下是directory1-uat。然后您将获得$subDir. 您希望文件位于 中$subDir,而不是整个父树中。[咧嘴笑]

尝试替换$subDir.PSParentPath$subDir. 这条线...

$subParamFiles = Get-ChildItem -Path $subDir.PSParentPath -Recurse -File -Include "*parameters.json"

……会变成这样……

$subParamFiles = Get-ChildItem -Path $subDir -Recurse -File -Include "*parameters.json"
于 2020-01-05T06:49:37.707 回答
0

您应该给出当前路径而不是父路径:

$subDirs = dir "C:\Users\Documents\Azure\Templates\*\" -Directory | ? {$_.fullname -notlike "*_Templates*"}
    $subDirs
    $subDirs | % {
        $_
        $_.Name.split('-')[1]
        dir $_ -Recurse -File -Filter "*parameters.json"
    }
于 2020-01-04T15:46:02.933 回答