【问题标题】:How do I print file for a specific parent/child using Get-ChildItem?如何使用 Get-ChildItem 打印特定父/子的文件?
【发布时间】:2020-04-22 18:43:01
【问题描述】:

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

文件夹结构如下:

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

【问题讨论】:

  • 我认为你的问题是这个$subDir.PSParentPath。我怀疑您正在获取 parent 路径...然后它会获取整个树中的所有 json 文件。如果你只使用实际路径而不是 parent 路径会发生什么?
  • @Lee_Dailey 我有多个目录:C:\Users\Documents\Azure\repo\Templates\directory*
  • 您正在打印$subDir - 第一种情况是directory1-uat。那么您将获得$subDir 的父目录的文件列表。您想要$subDir 中的文件,而不是整个父树中的文件。尝试用 $subDir 替换 $subDir.PSParentPath
  • 另外,您可能应该考虑使用自定义对象而不是手动构建文本行。
  • 不客气!很高兴能帮上一点忙……[grin]

标签: powershell powershell-6.0


【解决方案1】:

您正在打印$subDir - 在第一种情况下是directory1-uat。然后您将获得$subDir 的父目录的文件列表。您想要 $subDir 中的文件,而不是整个父树中的文件。 [咧嘴一笑]

尝试用$subDir 替换$subDir.PSParentPath。这一行……​​

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

...会变成这个...

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 2012-04-17
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多