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
相关产品推荐
相关产品推荐

