在不使用正则表达式的情况下使用 Powershell 替换文件中的多行文本

Kal*_*nGi 4 powershell replace

我有以下 Powershell 脚本:

$oldCode =  @"
            <div id="time_estimate">
                <!-- some large table -->
            </div>
"@

$newCode = @"
            <div id="time_estimate">
                                <!-- nested divs and spans -->
                                <div id="contact-form">

                                        <?php include "contact-form.php"; ?>
                                </div>
                        </div>
"@

ls *.html | foreach { 
        $fileContent = [System.Io.File]::ReadAllText($_.FullName)
        $newFileContent = $fileContent.Replace($oldCode, $newCode)
        [System.Io.File]::WriteAllText($_.FullName, $newFileContent)
        Write-Host  "`r`n"
        Write-Host  "Processed - $($_.Name)...`r`n" }
Run Code Online (Sandbox Code Playgroud)

这似乎并没有取代文本。这是多行字符串的问题,还是 Replace() 方法的限制?我宁愿在不引入正则表达式的情况下进行替换。

Kev*_*inD 5

您使用的是哪个版本的 PowerShell?如果您使用的是 v3 或更高版本,请尝试以下操作:

ls *.html | foreach { 
    $fileContent = Get-Content $_.FullName -Raw
    $newFileContent = $fileContent -replace $oldCode, $newCode
    Set-Content -Path $_.FullName -Value $newFileContent
    Write-Host  "`r`n"
    Write-Host  "Processed - $($_.Name)...`r`n" 
}
Run Code Online (Sandbox Code Playgroud)