如何使用PowerShell替换XML文件中的特殊字符

时间:2019-04-24 16:19:03

标签: powershell

我需要替换文件中的所有<>"。我正在使用以下内容,但失败了。

powershell.exe -Command (Get-Content C:\Users\dearo05\Documents\founders\annual_dividend_cov.xml) |
    ForEach-Object {
        $_ -replace '\<', '&#60;' `
           -replace '>', '&#62;' `
           -replace '\"', '&#62;'
} | Set-Content c:\Users\dearo05\Documents\founders\annual_dividend_cov.xml

1 个答案:

答案 0 :(得分:0)

这只是尝试将值传递到-Command时的报价问题。

如果在PowerShell控制台中调用此命令,则将起作用。

Powershell.exe -Command "(Get-Content C:\Users\dearo05\Documents\founders\annual_dividend_cov.xml) -replace '\<','&#60;' -replace '\>','&#62;' -replace '\`"', '&#62;' | Set-Content c:\Users\dearo05\Documents\founders\annual_dividend_cov.xml"

如果从CMD调用此命令,则将起作用:

Powershell.exe -Command "(Get-Content C:\Users\dearo05\Documents\founders\annual_dividend_cov.xml) -replace '\<','&#60;' -replace '\>','&#62;' -replace '\""', '&#62;' | Set-Content c:\Users\dearo05\Documents\founders\annual_dividend_cov.xml"

传递给-Command的值应该用双引号引起来。最简单的方法是在可能的情况下将值内的所有双引号都转换为单引号,然后将值内的双引号转义。如果从PowerShell会话调用,则需要反引号对内部双引号(`“)进行反击。如果从CMD.exe内部调用,则需要对双引号进行转义以使引号(”“)。