在管道中间获取文件名

时间:2015-08-10 15:11:57

标签: powershell

我有一个完美的正则表达式,但我想添加找到正则表达式的文件,当前代码:

$results = Get-ChildItem ../MyDir -filter "*.txt" -Recurse | Get-Content | 
             Select-String -pattern "Token: ([^']*)" -AllMatches | 
                 % {$_.Matches} | % {$_.Groups[1].Value}

需要:

$results = Get-ChildItem ../MyDir -filter "*.txt" -Recurse | Get-Content | 
             Select-String -pattern "Token: ([^']*)" -AllMatches |
                 % {$_.Matches} | % {<<FileNameMatchWasFoundIn>> + $_.Groups[1].Value}

这可能不会把它变成一个大的for循环吗?

1 个答案:

答案 0 :(得分:1)

直接传送到Select-String,结果输出对象将具有Path属性,文件名为:

$results = Get-ChildItem ../MyDir -filter "*.txt" -Recurse | Select-String -pattern "Token: ([^']*)" -AllMatches |ForEach-Object {
    New-Object psobject -Property @{
        File = $_.Path
        Matches = $_.Matches |% {$_.Groups[1].Value}
    }
}

如果你只想要一个字符串作为结果:

$results = Get-ChildItem ../MyDir -filter "*.txt" -Recurse | Select-String -pattern "Token: ([^']*)" -AllMatches |ForEach-Object {
    "{0}: {1}" -f $_.Path,$(($_.Matches|%{$_.Groups[1].Value}) -join ";")
}