如何用PowerShell提取方括号内数字并插入至下一行对应位置
解决方案
可以通过逐行遍历文件内容,记录从方括号中提取的编号,再在后续对应行中替换内容。以下是可实现需求的代码:
$inputPath = "D:\Users\j\Desktop\New folder\Environment-p.ini" $outputPath = "D:\Users\j\Desktop\New folder\Environment-p mod.ini" $currentNumber = $null Get-Content $inputPath | ForEach-Object { # 匹配方括号内的编号并保存 if ($_ -match '(?<=\[)\d+(?=\])') { $currentNumber = $matches[0] $_ # 输出原行 } # 对目标行插入已保存的编号 elseif ($_ -match 'id = Item\s*$') { $_ -replace 'id = Item\s*$', "id = Item $currentNumber" } # 其他行直接输出 else { $_ } } | Set-Content $outputPath -Encoding UTF8
代码说明
- 使用
Get-Content读取文件内容并逐行处理 - 正则表达式
(?<=\[)\d+(?=\])专门匹配方括号内的数字编号,提取后存入变量暂存 - 针对包含
id = Item的目标行,用正则替换将编号追加到Item之后 - 非目标行保持原样输出,最终通过
Set-Content写入修改后的文件
原代码失败原因
- 第一段代码存在语法错误:管道流中不能直接执行变量赋值操作,且
select-string的输出处理逻辑混乱 - 第二段代码错误使用
-replace语法,同时未正确关联匹配到的编号和对应的目标行
内容的提问来源于stack exchange,提问作者egrat
相关产品推荐
相关产品推荐

