【问题标题】:How do I get the names of certain subfolders that only contain files and no other subfolders?如何获取仅包含文件而没有其他子文件夹的某些子文件夹的名称?
【发布时间】:2022-01-24 16:52:20
【问题描述】:

从具有多个级别的子文件夹的文件夹中,我只想将子文件夹名称(不带路径)保存到仅包含文件且不再包含子文件夹的文本文件中。

示例:只有位于 C:\1\2\3 中的子文件夹“Test”包含文件,但没有其他子文件夹。脚本应检测到这一点并将文件夹名称 Test 保存在文本文件中。如果有更多像“Test”这样的子文件夹,这些也应该保存在文本文件中。

包含子文件夹的主文件夹应该是与 .ps1 文件处于同一文件夹级别的文件夹。

我怎样才能意识到这一点?

【问题讨论】:

    标签: powershell subdirectory


    【解决方案1】:

    首先在当前路径中查找所有文件夹和子文件夹(递归):

    Get-ChildItem -LiteralPath $PSScriptRoot -Directory -Recurse
    

    然后根据每个目录本身是否包含0个子文件夹和0个以上的文件进行过滤:

    Get-ChildItem -LiteralPath $PSScriptRoot -Directory -Recurse |Where-Object {
      -not($_ |Get-ChildItem -Directory |Select-Object -First 1) -and $($_ |Get-ChildItem -File -Filter *.txt |Select-Object -First 1)
    }
    

    如果$_ |Get-ChildItem -Directory |Select-Object -First 1 返回anything,则表示至少有1 个子文件夹。

    同样,如果$_ |Get-ChildItem -Filter *.txt |Select-Object -First 1 返回anything,那么我们知道目录中至少存在1 个.txt 文件。

    然后我们只需要获取文件夹名称,您可以使用Select-Object -ExpandPropertyForEach-Object 抓取:

    Get-ChildItem -LiteralPath $PSScriptRoot -Directory -Recurse |Where-Object {
      -not($_ |Get-ChildItem -Directory |Select-Object -First 1) -and ($_ |Get-ChildItem -File -Filter *.txt |Select-Object -First 1)
    } |Select-Object -ExpandProperty Name
    

    【讨论】:

    • 完美运行!非常感谢!我已经研究了很长时间,但没有找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2016-02-05
    • 2017-08-14
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多