2

在Powershell 的这个问题select-string之后,我想知道如何在下面的管道中,从管道的各个部分提取多个返回值。

Get-ChildItem "*.*" | Where-Object {$_.Name -match 'someMatchingCriteria.*'} | select-string -pattern 'someInterestingString' | Select-Object -Unique Path

具体来说,我想知道如何从select-string判断是否实际找到任何东西以及找到包含搜索字符串的任何文件路径中获取布尔值,以便我可以执行 if 语句来停止并宣布发现哪些文件包含该字符串,或者不打印任何内容继续。

如果我只是在$test=该行的前面放一个 a ,它会返回 a 内的路径@{ },但我认为如果你使用 select-string 本身会生成一个布尔值-quiet

4

2 回答 2

3

您已经拥有它,您只需对其进行测试并输出结果。

$searchresults = Get-ChildItem "*.*" | Where-Object {$_.Name -match 'someMatchingCriteria.*'} | select-string -pattern 'someInterestingString' | Select-Object -Unique Path


if ($searchresults -eq $null) {
    "No matches found"
} else {
    "Matches found in the following files"
    $searchresults  | foreach {$_.Path}
}
于 2013-11-12T18:04:59.227 回答
1

为此,您可以使用-List参数 on Select-String。它将在第一次成功匹配后停止,例如:

Get-ChildItem *.* | Where-Object {$_.Name -match 'someMatchingCriteria.*'} | 
    Select-String -pattern 'someInterestingString' -List | 
    Foreach {$_.Path}

Select-String 始终返回一个Microsoft.PowerShell.Commands.MatchInfo对象,因此如果您只想要路径,只需选择一个属性 - Path

于 2013-11-12T18:01:27.910 回答