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

PowerShell中如何提取文本字段并拼接为指定输出格式

PowerShell 文本字段拼接实现方案

你原有脚本的核心问题是逐行独立匹配筛选,没有把同一条目下的Name和Type字段值做关联,因此无法完成拼接。以下提供两种可直接运行的实现:


方案1:按文本块分割处理(适配块结构文本最直观)

$file = "D:\XXX\test.txt"
# 一次性读取全文件,按连续空行分割为独立条目块,过滤空内容块
$entries = (Get-Content $file -Raw) -split '\r?\n\s*\r?\n' | Where-Object { $_ -match '\S' }

foreach ($entry in $entries) {
    # 正则提取当前块内Name字段冒号后的值,自动忽略多余空格
    $name = if ($entry -match '(?m)^\s*Name\s*:\s*(.+?)\s*$') { $matches[1] }
    # 正则提取当前块内Type字段冒号后的值
    $type = if ($entry -match '(?m)^\s*Type\s*:\s*(.+?)\s*$') { $matches[1] }
    
    if ($name -and $type) {
        Write-Output "$name/$type"
    }
}

方案2:逐行遍历暂存值(大文件处理效率更高)

$file = "D:\XXX\test.txt"
$tempName = $null
$tempType = $null

foreach ($line in Get-Content $file) {
    # 匹配到Name行时暂存值
    if ($line -match '^\s*Name\s*:\s*(.+?)\s*$') {
        $tempName = $matches[1]
    }
    # 匹配到Type行时暂存值
    elseif ($line -match '^\s*Type\s*:\s*(.+?)\s*$') {
        $tempType = $matches[1]
    }

    # 两个字段值都收集完成后拼接输出,清空暂存变量等待下一组
    if ($tempName -and $tempType) {
        Write-Output "$tempName/$tempType"
        $tempName = $null
        $tempType = $null
    }
}

说明

  • 两种方案均为PowerShell原生实现,无需调用findstr等外部命令,自动兼容键名与冒号之间空格数量不统一的格式问题
  • 方案1逻辑更贴合当前文件按空行分块的结构,代码可读性更高
  • 方案2为逐行流式处理,加载GB级大文件时内存占用更低,执行效率更好

内容的提问来源于stack exchange,提问作者TomTom30

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:21:29