我正在尝试替换一个字符以在Powershell字符串中将其转义,以便稍后将其转换为JSON。我想用单引号后跟双引号替换cmdline中的双引号,以避免双引号。
我有这个字符串:user123" -a.exe
我想user123'" -a.exe
我尝试使用-replace函数的不同组合,如
$test -replace '"',''"'
但由于这些角色的特殊性,没有人工作。
提前感谢您的帮助
答案 0 :(得分:3)
要强制Windows PowerShell按字面解释双引号,请使用反引号(`)字符。
PS C:\> $test = "user123`" -a.exe"
PS C:\> $test
user123" -a.exe
PS C:\> $test = $test -replace "`"","'`""
PS C:\> $test
user123'" -a.exe
要了解与报价一起使用的大多数变体和技巧,请键入
Help about_Quoting_Rules
在Powershell控制台上。
答案 1 :(得分:2)
你需要使用反引号(`)字符来转义特殊字符并使用 String.Replace 方法
$test = "user123`" -a.exe"
$test.replace("`"","`'`"")
结果:
user123'" -a.exe
答案 2 :(得分:2)
如果您正在处理操作引用文本,并发现转义规则令人困惑和/或导致混淆代码,您也可以将其作为here-strings处理。在here-string分隔符(@' - '@)中,正常引用规则不适用。它可以生成更长的代码,但可以更直观地阅读和调试,或者稍后进行维护。
$string = @'
user123" -a.exe
'@
$match = @'
"
'@
$replace = @'
"'
'@
$string.replace($match,$replace)
user123"' -a.exe
这显然是一个微不足道的例子,但是随着引用文本的数量和增加,使用here-strings而不是使用转义字符构建参数内联的优势。