如何从.bat文件中转义PowerShell双引号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从.bat文件中转义PowerShell双引号相关的知识,希望对你有一定的参考价值。
我正在尝试使用从Windows 7中的bat文件运行的PowerShell命令,用两个双引号替换文件(temp1.txt)中的所有双引号:
powershell -Command "(gc c: emp emp1.txt) -replace '"', '""' | Out-File -encoding UTF8 c: emp emp2.txt"
我一直收到错误:
'Out-File' is not recognized as an internal or external command.
当我更改命令以用字母“b”替换字母“a”时,它可以正常工作:
powershell -Command "(gc c: emp emp1.txt) -replace 'a', 'b' | Out-File -encoding UTF8 c: emp emp2.txt"
我需要逃避双引号,因为整个powershell -Command
在双引号字符串内。你怎么逃避双重报价?
嗯,在这里你需要在命令行中,在双引号字符串中转义"
。从我的测试来看,唯一可行的是引用参数中的四倍双引号""""
:
powershell.exe -command "echo '""""X""""'"
那么你的命令行应该是:
powershell -Command "(gc c: emp emp1.txt) -replace '""""', '""""""""' | Out-File -encoding UTF8 c: emp emp2.txt"
还有另一种方法可以使用PowerShell来处理这个问题,假设您不想将这些命令放在文件中并以这种方式调用它:使用-EncodedCommand
。这使您可以对整个命令或脚本进行base64编码,并将其作为单个参数传递给命令行。
所以这是你的原始命令:
(gc c: emp emp1.txt) -replace '"', '""' | Out-File -encoding UTF8 c: emp emp2.txt
这是一个编码它的脚本:
$c = @"
(gc c: emp emp1.txt) -replace '"', '""' | Out-File -encoding UTF8 c: emp emp2.txt
"@
$b = [System.Text.Encoding]::Unicode.GetBytes($c)
$e = [System.Convert]::ToBase64String($b)
$e
现在包含:
KABnAGMAIABjADoAXAB0AGUAbQBwAFwAdABlAG0AcAAxAC4AdAB4AHQAKQAgAC0AcgBlAHAAbABhAGMAZQAgACcAIgAnACwAIAAnACIAIgAnACAAfAAgAE8AdQB0AC0ARgBpAGwAZQAgAC0AZQBuAGMAbwBkAGkAbgBnACAAVQBUAEYAOAAgAGMAOgBcAHQAZQBtAHAAXAB0AGUAbQBwADIALgB0AHgAdAA =
所以你的新命令行可以是:
powershell.exe -encodedCommand KABnAGMAIABjADoAXAB0AGUAbQBwAFwAdABlAG0AcAAxAC4AdAB4AHQAKQAgAC0AcgBlAHAAbABhAGMAZQAgACcAIgAnACwAIAAnACIAIgAnACAAfAAgAE8AdQB0AC0ARgBpAGwAZQAgAC0AZQBuAGMAbwBkAGkAbgBnACAAVQBUAEYAOAAgAGMAOgBcAHQAZQBtAHAAXAB0AGUAbQBwADIALgB0AHgAdAA=
没有必要担心逃避任何事情。
对于PowerShell,转义字符非常重要。试试这个:
powershell -Command "(gc c: emp emp1.txt) -replace `", `"`" | Out-File -encoding UTF8 c: emp emp2.txt"
以上是关于如何从.bat文件中转义PowerShell双引号的主要内容,如果未能解决你的问题,请参考以下文章