使用批处理powershell命令将单引号替换为文件中的两个单引号

时间:2018-08-14 10:05:24

标签: powershell single-quotes

我目前正在开发一个自动设置程序。它必须执行SQL命令。我决定用一个简单的批处理文件创建它,该文件允许我使用sqlcmd或Powershell之类的命令。

我正在处理一个XML文件,该文件将插入到另一个文件中。首先,我必须替换其中的一些字符串。我成功地使用了-replace这样的命令:

powershell -Command "(gc source_file.xml) -replace 'utf-8', 'utf-16' | sc updated_file.xml"

现在,updated_file.xml仍包含单引号,我想用''代替(两个单引号)。我想再次使用replace命令进行替换。我试图转义单引号字符,但没有用:

powershell -Command "(gc source_file.xml) -replace "`'", "`'`'" | sc updated_file.xml"

该错误表明单引号没有转义。而且,就我而言,replace命令似乎只读取单引号之间的字符串。我也尝试过使用regex :: Escape(“`”“)失败。

你有什么主意吗?

非常感谢!

2 个答案:

答案 0 :(得分:2)

尝试一下:

powershell -Command "(gc source_file.xml)  -replace 'utf-8', 'utf-16' -replace '''', '''''' | sc updated_file.xml"

答案 1 :(得分:1)

对于cmd.exe,您必须使用反斜杠对内部双引号进行转义,因此这应该可行:

powershell -NoP -C "(gc source_file.xml) -replace 'utf-8','utf-16' -replace \"'\",\"''\" | Set-Content updated_file.xml" 

提示:别名sc在即将发布的PowerShell版本中已删除,因此请避免使用它。 同样,更改内容文本utf8 => utf-16不会更改编码(可能将-Encoding UTF8附加到gc。