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

PowerShell多文件内容替换时对齐异常问题求助

PowerShell批量替换文件内容排版对齐问题解决

问题描述

批量替换.csconfigini文件内容时,替换后的3行目标内容无法保持正确排版对齐,呈现错乱锯齿状。需要替换的目标内容如下:

<Hello world=""`'$($Apple)'=='Hero'"">Invoice</battery>
<Sunday>World</Sunday>
<battery>Hello</battery>

原脚本问题分析

原脚本存在以下逻辑错误导致排版错乱:

  • 提取前置空白符时,匹配的是<BatchReleaseType>datacenter</BatchReleaseType>,但实际替换的目标是<String>Invoice</battery>,两者不对应,导致空白符提取错误。
  • Here-String中额外添加了4个前置空格,与捕获的空白符叠加后,缩进层级混乱。
  • 未正确转义替换内容中的PowerShell变量,可能导致变量提前解析出错。

修正后的脚本

$configFiles = Get-ChildItem . *.csconfigini -Recurse
foreach ($file in $configFiles) {
    try {
        Write-Host "Processing $($file.FullName)"
        $content = Get-Content $file.PSPath -Raw -ErrorAction Stop
        # 匹配目标行并捕获其前置空白符
        if ($content -match '(?s)(^\s*)<String>Invoice</battery>') {
            Write-Host "Match found in $($file.FullName)"
            $leadingWhitespace = $matches[1]
            # 构建对齐的替换内容:第一行与原行同缩进,后两行加2个空格层级
            $replacement = @"
${leadingWhitespace}<Hello world=""`'`$(`$Apple)'=='Hero'"">Invoice</battery>
${leadingWhitespace}  <Sunday>World</Sunday>
${leadingWhitespace}  <battery>Hello</battery>
"@
            $content = $content -replace '(?s)<String>Invoice</battery>', $replacement
            $content | Set-Content $file.PSPath -ErrorAction Stop
            Write-Host "Replacement done for $($file.FullName)"
        } else {
            Write-Host "No match found in $($file.FullName)"
        }
    } catch [System.UnauthorizedAccessException] {
        Write-Host "Skipping file $($file.PSPath) due to permission issue."
    } catch {
        Write-Host "Error occurred while processing $($file.PSPath): $_"
    }
}

修正说明

  1. 空白符捕获修正:通过正则(?s)(^\s*)<String>Invoice</battery>直接捕获目标替换行的前置空白符,确保空白符与目标行完全对应。
  2. 缩进层级统一:移除Here-String中额外的前置空格,仅保留捕获到的原空白符;后两行在原缩进基础上添加2个空格,保持层级对齐。
  3. 变量转义修正:将$($Apple)转义为$($Apple)`,避免PowerShell在解析Here-String时提前处理该变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:36:06