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

PowerShell遍历文本提取作业参数并填充模板的问题求助

问题描述

有一个包含以下内容的文件dslreading.txt:

build( "job1", parameter1: value1, parameter2: value2 )

build( "job2", parameter3: value3, parameter4: value4, parameter5: value5 )

build( "job3", parameter6: value6, parameter7: value7, parameter8: value8,  parameter9: value9 )

需要遍历每行提取作业名和对应的参数键值对,填充到动态模板中,但现有代码每次循环仅获取到job1,也无法正确提取参数。

解决方案

以下是修正后的PowerShell代码,可正确遍历每行提取数据并生成符合要求的模板内容:

$file = Get-Content $PSScriptRoot/dslreading.txt | Where-Object { $_ -match 'build\(' }

foreach ($buildJob in $file) {
    # 提取当前行的作业名
    if ($buildJob -match '"([^"]+)"') {
        $jobName = $matches[1]
    }

    # 提取当前行所有参数的键值对
    $paramMatches = [regex]::Matches($buildJob, '(\w+):\s*(\w+)')
    $paramList = @()
    foreach ($match in $paramMatches) {
        $paramName = $match.Groups[1].Value
        $paramValue = $match.Groups[2].Value
        $paramList += "string(name: '$paramName', value: ""$paramValue"")"
    }

    # 动态拼接模板内容
    $jobs = "build job: '$jobName', parameters: [$($paramList -join ', ')]"
    Write-Host $jobs
}

关键修改说明

  • 过滤无效行:通过Where-Object { $_ -match 'build\(' }筛选出包含build(的有效行,跳过空行避免无效循环。
  • 逐行提取作业名:针对当前循环的行,用正则匹配引号内的内容,确保每次获取的是当前行的作业名,而非整个文件的第一个作业名。
  • 动态处理参数:用正则(\w+):\s*(\w+)匹配所有参数的键和值,遍历匹配结果生成参数字符串列表,再通过-join拼接成模板需要的格式,适配任意数量的参数。
  • 模板动态生成:利用参数列表的拼接结果,自动适配不同参数数量,无需手动固定模板中的参数项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:45:01