Powershell Get-ChildItem-深度属性问题

时间:2019-01-22 16:27:25

标签: powershell get-childitem

Powershell 5.1版

我有一个文件的2个副本,一个这样嵌套,比另一个嵌套更深。

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

我想使用Get-ChildItem查找较浅(较深的文件)的文件。许多帖子建议将-Path定义为“ C:\ temp \ *”或“ C:\ temp \ * \ *”。但是我想使用Get-ChildItem cmdlet的-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:\> 

2 个答案:

答案 0 :(得分:0)

使用-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

答案 1 :(得分:0)

使用-include作为过滤器时,-depth似乎被忽略了(错误?)。

-include可用于匹配多个条件。 如果您只有一个条件并且想要限制搜索深度,或者使用一个条件进行多次搜索,则最好使用-filter