找到并递归

时间:2018-01-31 10:21:55

标签: powershell powershell-v2.0

我有一个文件夹结构d:\domains\<domain>\folder1\folder2\folderx

可能有20个<domain>个文件夹,其下方有不同级别的文件夹。

我想在所有文件夹中搜索.php个文件,然后只打印退出的唯一<domain>个文件夹。

例如,如果在

中找到了文件
  • d:\域\ domain1.com \测试\测试
  • d:\域\ domain2.com \测试\测试
  • d:\域\ domain2.com \测试\帮助

我只想打印domain1.com,domain2.com。它需要在PowerShell v2中工作。

我有以下内容,但它只打印第一个域?

Get-ChildItem -Path @(Get-ChildItem -Path D:\domains | Where-Object {$_.PSIsContainer})[1].FullName -Recurse *.php |
    Select-Object -ExpandProperty FullName

1 个答案:

答案 0 :(得分:1)

枚举域文件夹,然后筛选包含.php文件的文件夹。

Get-ChildItem 'D:\domains' | Where-Object {
    $_.PSIsContainer -and
    (Get-ChildItem $_.FullName -Filter '*.php' -Recurse)
}

如果你有PowerShell v3或更新版本,你可以使用-Directory开关,而不是检查$_.PSIsContainer

Get-ChildItem 'D:\domains' -Directory | Where-Object {
    Get-ChildItem $_.FullName -Filter '*.php' -Recurse
}

如果只需要文件夹/域名,请从输出中选择Name属性:

... | Select-Object -Expand Name