如何在PowerShell提取字符串时将文件名添加到输出行开头?
解决PowerShell提取字符串时添加对应文件名的问题
我来帮你搞定这个需求!你需要的其实是利用Select-String返回对象自带的文件信息,把它和匹配到的字符串拼接起来就行。
修改后的完整代码
$input_path = 'path' # 替换成你的目标文件路径,比如 "C:\test\*.txt" $output_file = 'output.txt' $regex = '(.+?)' # 可以根据实际需要调整正则表达式 select-string -Path $input_path -Pattern $regex -AllMatches | ForEach-Object { # 获取当前匹配项所属的文件完整路径(如果只想要纯文件名,看下面的说明) $fileFullPath = $_.Path # 遍历当前文件下的所有匹配结果 foreach ($match in $_.Matches) { # 拼接文件名和匹配值,这里用制表符分隔,也可以换成空格或其他符号 "$fileFullPath`t$($match.Value)" } } | Out-File $output_file -Encoding utf8
关键细节说明
- 获取文件名的灵活方式:
$_.Path会返回文件的完整路径(比如C:\test\file1.txt)- 如果只想要纯文件名(不含路径,比如
file1.txt),可以把$fileFullPath = $_.Path改成:
然后拼接的时候用$fileName = [System.IO.Path]::GetFileName($_.Path)"$fileNamet$($match.Value)"`即可。
- 为什么这么改:原来的代码直接跳到了
$_.Matches,丢失了上层MatchInfo对象里的文件信息;现在先处理每个文件对应的MatchInfo,保留文件名后再遍历匹配项,就能确保每个字符串都对应正确的文件。 - 编码优化:用
Out-File替代>可以指定编码(比如-Encoding utf8),避免输出文件出现乱码。
内容的提问来源于stack exchange,提问作者kat
相关产品推荐
相关产品推荐

