如何获取某些仅包含文件而没有其他子文件夹的子文件夹的名称?
How do I get the names of certain subfolders that only contain files and no other subfolders?
从一个包含多个子文件夹的文件夹中,我只想将子文件夹名称(没有路径)保存到一个只包含文件而没有更多子文件夹的文本文件中。
示例:只有位于 C: 的子文件夹“Test”包含文件,但没有其他子文件夹。该脚本应检测到这一点并将文件夹名称 Test 保存在文本文件中。如果有更多子文件夹,如“Test”,这些也应该保存在文本文件中。
包含子文件夹的主文件夹应该是与 .ps1 文件处于同一文件夹级别的文件夹。
我如何实现这一点?
首先查找当前路径中的所有文件夹和子文件夹(递归):
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
returns anything,则表示至少有1个子文件夹。
类似地,如果$_ |Get-ChildItem -Filter *.txt |Select-Object -First 1
returns anything,那么我们知道目录中至少存在1个.txt文件。
然后我们只需要获取文件夹名称,您可以使用 Select-Object -ExpandProperty
或 ForEach-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
从一个包含多个子文件夹的文件夹中,我只想将子文件夹名称(没有路径)保存到一个只包含文件而没有更多子文件夹的文本文件中。
示例:只有位于 C: 的子文件夹“Test”包含文件,但没有其他子文件夹。该脚本应检测到这一点并将文件夹名称 Test 保存在文本文件中。如果有更多子文件夹,如“Test”,这些也应该保存在文本文件中。
包含子文件夹的主文件夹应该是与 .ps1 文件处于同一文件夹级别的文件夹。
我如何实现这一点?
首先查找当前路径中的所有文件夹和子文件夹(递归):
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
returns anything,则表示至少有1个子文件夹。
类似地,如果$_ |Get-ChildItem -Filter *.txt |Select-Object -First 1
returns anything,那么我们知道目录中至少存在1个.txt文件。
然后我们只需要获取文件夹名称,您可以使用 Select-Object -ExpandProperty
或 ForEach-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