如何使用PowerShell按序号批量替换文本文档中的多行指定短语
解决方案
你可以在遍历文本前先初始化序号变量,匹配时对Test和Results分别处理,匹配完同一组的Results后再让序号自增即可,完整脚本如下:
# 初始化测试序号,从1开始 $testNumber = 1 Get-Content -Path C:\test-directory\Test-Text.txt | ForEach-Object { if ($_ -match 'Test\s*<>') { # 匹配到Test行,用当前序号替换 $_ -replace 'Test\s*<>', "Test <This is for test $testNumber:>" } elseif ($_ -match 'Results\s*<>') { # 匹配到Results行,用当前序号替换 $newLine = $_ -replace 'Results\s*<>', "Results <Values for test $testNumber:>" # 同一组处理完成,序号自增供下一组使用 $testNumber++ $newLine } else { # 其他行直接输出不修改 $_ } } | Set-Content -Path C:\test-directory\New-Test-Text.txt
关键逻辑说明
- 序号变量
$testNumber在遍历循环外部初始化,作用域覆盖整个遍历过程,不会每次循环重置 - 先匹配Test行,使用当前序号替换,暂不自增序号
- 再匹配同组的Results行,使用相同序号替换,完成后序号自增,保证下一组的Test和Results使用新的序号
- 正则中的
\s*兼容Test和<>之间可能存在的多余空格,避免匹配失败
内容的提问来源于stack exchange,提问作者NoBody
相关产品推荐
相关产品推荐

