使用Get-ChildItem Powershell cmdlet的-Depth属性

mnemlml8  于 2023-02-16  发布在  Shell
关注(0)|答案(2)|浏览(208)

我正尝试使用Get-Children cmdlet的-Depth参数来查找两个同名文件中较浅(较浅)的一个,如下所示。

C:\temp\test.txt
C:\temp\Logs\test.txt

许多帖子建议将-Path定义为“C:\temp*”或“C:\temp**"。但在我的例子中,我更喜欢使用-Depth参数来限制搜索中的递归深度。我读到它暗示递归,因此不需要与递归一起使用。到目前为止,我尝试了下面所有的命令,但它们都返回了相同的结果。

Get-ChildItem -Path C:\temp -Depth 0 -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 1 -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 2 -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 3 -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth '1' -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth "1" -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth $d -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth $d -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 0 -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 0 -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 2 -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 3 -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Include tes*.txt -Depth 1 | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Include tes*.txt -Depth 0 | Format-List -Property FullName
Get-ChildItem -Path C:\temp -File -Include tes*.txt -Depth 0 | Format-List -Property FullName
Get-ChildItem -Path C:\temp -File -Include tes*.txt -Depth 1 | Format-List -Property FullName
Get-ChildItem -Path C:\temp -File -Include tes*.txt -Depth 2 | Format-List -Property FullName
Get-ChildItem -Path C:\temp\* -Include tes*.txt -Recurse | Format-List -Property FullName

上面的所有命令都会产生相同的结果,即

FullName : C:\temp\Logs\test.txt
FullName : C:\temp\test.txt

除了-Depth属性之外,使用许多人建议的“*”使我能够隔离更深的文件,而不是更浅的文件。

PS C:\>  Get-ChildItem -Path C:\temp\* -Include tes*.txt -Recurse | Format-List -Property FullName

FullName : C:\temp\Logs\test.txt
FullName : C:\temp\test.txt

PS C:\>  Get-ChildItem -Path C:\temp\*\* -Include tes*.txt -Recurse | Format-List -Property FullName

FullName : C:\temp\Logs\test.txt

PS C:\>  Get-ChildItem -Path C:\temp\*\*\* -Include tes*.txt -Recurse | Format-List -Property FullName

PS C:\>
iecba09b

iecba09b1#

-Depth的用法似乎排除了-Include
甚至-Path参数中的通配符。
在此示例树中,让-Filter执行此操作:

> tree /F
C:.
└───temp
    │   Test.txt
    │
    └───0
        │   Test.txt
        │
        └───1
            │   Test.txt
            │
            └───2
                    Test.txt

这一个内衬:

0..4|%{"-Depth $_ ---------------";(Get-ChildItem -Path C:\Temp\ -Depth $_ -Filter Tes*.txt).FullName}

退货:

-Depth 0 ---------------
C:\Temp\Test.txt
-Depth 1 ---------------
C:\Temp\Test.txt
C:\Temp\0\Test.txt
-Depth 2 ---------------
C:\Temp\Test.txt
C:\Temp\0\Test.txt
C:\Temp\0\1\Test.txt
-Depth 3 ---------------
C:\Temp\Test.txt
C:\Temp\0\Test.txt
C:\Temp\0\1\Test.txt
C:\Temp\0\1\2\Test.txt
-Depth 4 ---------------
C:\Temp\Test.txt
C:\Temp\0\Test.txt
C:\Temp\0\1\Test.txt
C:\Temp\0\1\2\Test.txt
xyhw6mcr

xyhw6mcr2#

当使用-include作为过滤器时,-depth似乎被忽略(bug?)。
-include可用于匹配多个条件。如果只有一个条件,并且希望限制搜索深度,或使用单个条件执行多个搜索,则最好使用-filter

相关问题