Powershell-遍历特定的嵌套目录

时间:2018-07-04 12:25:54

标签: powershell iteration

让我们考虑一下这个文件夹树

SomeFolder\
    User1\Desktop
    User2\Desktop
    User3\Desktop
    User4\Desktop
    User5\Desktop
    ...

现在,我的目标是扫描每个\Desktop文件夹中的某种文件。我能够找到使用Get-ChildItem来搜索特定类型的方法,但是我似乎无法获得在每个用户之间循环然后在各自桌面上查看的符号。

这是我的尝试,

for($i=0;$i -le 2;$i++){
    $Files = Get-ChildItem SomeFolder\*\Desktop -Filter *.txt -Recurse
    return $Files
}

注意

我添加了一个for循环,以最大程度地减少要扫描的用户数量。但是它显然不能正常工作,因为它一直在运行。

编辑

@Vivek Kumar Singh的道具,强调了我的代码中的问题。我的for循环实际上是多余的,这使得执行时间不必要地长。仅致电

$Files = Get-ChildItem SomeFolder\*\Desktop -Filter *.txt -Recurse

可能需要一些时间,但最终会起作用。

3 个答案:

答案 0 :(得分:1)

如果您只想返回Get-ChildItem的前两个结果,则可以使用Select-Object

$Files = Get-ChildItem SomeFolder\*\Desktop -Filter *.txt -Recurse | Select-Object -First 2

这应该可以快速运行,因为Get-ChildItem并没有完全枚举文件列表,管道在前两项之后中止了。

答案 1 :(得分:0)

这应该有效:

$folder = 'C:\work\SomeFolder'

gci $folder -Directory | %{
    $files = Get-ChildItem "$($_.FullName)\Desktop" -Filter *.txt
    Write-Host "$($_.Name) files"
    $files.FullName
}

答案 2 :(得分:-2)

像这样?我不测试。

$folders =  Get-ChildItem SomeFolder:\  -Directory -Filter "Desktop*"

foreach ($folder in $folders)
{
$Files = Get-ChildItem SomeFolder:\$folder -Filter *.txt -Recurse

}