Powershell 指定最小搜索深度

Powershell Specify Minimum Search Depth

这个问题实际上已经问过我好几次了,尽管进行了搜索,但我还是找不到答案。我在这里发帖是因为我找到了一个可以帮助其他用户的可行解决方案,但我也想知道是否有更好的方法来实现相同的结果。当我们写

Get-ChildItem -Recurse

我们可以指定最大深度,在这种情况下,Powershell 将只搜索子目录直到达到最大深度。但是,有时我想至少搜索到最小深度。为了我自己的目的,我真的只想排除我正在搜索的文件夹。

例如,如果我在 C:/MyFolder,我想从 MyFolder 子文件夹 中获取文件,但我不想获取任何文件MyFolder 中的文件,而不是其子目录之一。所以对于命令

Get-ChildItem -Recurse -Filter *.txt

检索以下文件很好

C:\MyFolder\test\hello.txt
C:\MyFolder\abc\cde\goodbye.txt

这些会不好

C:\MyFolder\yes.txt
C:\MyFolder\no.txt

为了解决这个问题,我可以这样写:

Get-ChildItem -Recurse -Filter *.txt | Where-Object -FilterScript {$_.Directory.FullName -ne $(Get-Location)}

我其实很满意,但我想知道是否有更好的方法来搜索最小深度,因为我是 PowerShell 新手。显然,我们可以编写一个函数来处理这个深度,但我想知道是否有任何更有经验的用户有更好的方法来做到这一点。

您可以两个Get-ChildItem调用:

Get-ChildItem -Directory | Get-ChildItem -Recurse -Filter *.txt

要概括解决方案,请使用基于通配符的 路径;例如,最小深度为 3:

Get-ChildItem */* -Directory | Get-ChildItem -Recurse -Filter *.txt