You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:35:24