Return 递归搜索后的文件路径和上下文文本行

Return file path and context text line after recursive search

正在尝试对所有 .txt 文件进行递归搜索以查找特定单词和 return 找到该文本的文件路径和上下文文本行。

目前正在使用以下 PowerShell 脚本递归搜索文本所在文件的路径并将其导出到单独的文件,然后打开它们以手动搜索上下文。由于上下文不同,该词可能在文件中出现多次,需要全部审核。

$Path = Get-Location
$Text0 = "sometext"
$PathArray = @()
$Results0 = "$Path$Text0.txt"

Get-ChildItem $Path -Filter "*.txt" -Recurse -Force -ErrorAction SilentlyContinue |
    Where-Object { $_.Attributes -ne "Directory" } |
    ForEach-Object {
        if (Get-Content $_.FullName | Select-String -Pattern $Text0) {
            $PathArray += $_.FullName
            $PathArray += $_.FullName
        }
    }
Write-Host "Contents of ArrayPath:"
$PathArray | ForEach-Object {$_} | Out-File $Results0 -Append 

我希望 "c:\folder\folder\folder\textfile.txt" 的输出(当前输出)为 "c:\folder\folder\folder\textfile.txt; This is the text line containing the context where sometext was found."

如果您使用的是 PowerShell 3.0 版或更高版本,您可以这样做:

Get-ChildItem -Path $Path -Filter "*.txt" -File -Recurse -Force |
    Select-String -Pattern $Text0 | 
    Select-Object Path, Line

对于 3.0 版以下的 PowerShell:

Get-ChildItem -Path $Path -Filter "*.txt" -Recurse -Force | 
    Where-Object { !$_.PsIsContainer } |
    Select-String -Pattern $Text0 | 
    Select-Object Path, Line, LineNumber

会 return 像

Path                    Line 
----                    ---- 
D:\test\blah.txt        this is the line that contains sometext.
D:\test\anotherfile.txt sometext