CMD:如何在CMD中转义此powershell命令?

CMD:如何在CMD中转义此powershell命令?,powershell,cmd,Powershell,Cmd,我有以下powershell命令: (gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz="foo" />', '$1LOL' | Out-File c:\foo.xml 但是,powershell命令有太多特殊字符,无论我使用什么转义,都无法正确执行 有人能帮我逃过powershell命令,让我把它放在cmd中吗?我自己找到了答案: powershell -Command "(gc c:\foo.xml -Raw) -replace '(

我有以下powershell命令:

(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz="foo" />', '$1LOL' | Out-File c:\foo.xml
但是,powershell命令有太多特殊字符,无论我使用什么转义,都无法正确执行


有人能帮我逃过powershell命令,让我把它放在cmd中吗?

我自己找到了答案:

powershell -Command "(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz=\"foo\" />', '$1LOL' | Out-File c:\foo.xml"
powershell-Command”(gcc:\foo.xml-Raw)-替换“(?s)(.*)”,$1LOL“|出文件c:\foo.xml”
诀窍是“用”而不是“用”逃跑


这帮助我找到了答案。

另一种方法是对命令进行Base64编码,并使用
-EncodedCommand
开关:

$CmdLine = @'
(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz="foo" />', '$1LOL' | Out-File c:\foo.xml
'@
$CmdLineBytes = [System.Text.Encoding]::Unicode.GetBytes($CmdLine)
$EncodedCommand = [System.Convert]::ToBase64String($CmdLineBytes)
cmd
调用它:

powershell.exe -EncodedCommand KABnAGMAIABjADoAXABmAG8AbwAuAHgAbQBsACAALQBSAGEAdwApACAALQByAGUAcABsAGEAYwBlACAAJwAoAD8AcwApACgALgAqACkAPABiAGEAcgAgAGIAYQB6AD0AIgBmAG8AbwAiACAALwA+ACcALAAgACcAJAAxAEwATwBMACcAIAB8ACAATwB1AHQALQBGAGkAbABlACAAYwA6AFwAZgBvAG8ALgB4AG0AbAA=

这真是太好了!也许您不知道,但不需要从
cmd.exe
运行它。只需使用PowerShell并直接从PowerShell提示符运行PowerShell命令。
KABnAGMAIABjADoAXABmAG8AbwAuAHgAbQBsACAALQBSAGEAdwApACAALQByAGUAcABsAGEAYwBlACAAJwAoAD8AcwApACgALgAqACkAPABiAGEAcgAgAGIAYQB6AD0AIgBmAG8AbwAiACAALwA+ACcALAAgACcAJAAxAEwATwBMACcAIAB8ACAATwB1AHQALQBGAGkAbABlACAAYwA6AFwAZgBvAG8ALgB4AG0AbAA=
powershell.exe -EncodedCommand KABnAGMAIABjADoAXABmAG8AbwAuAHgAbQBsACAALQBSAGEAdwApACAALQByAGUAcABsAGEAYwBlACAAJwAoAD8AcwApACgALgAqACkAPABiAGEAcgAgAGIAYQB6AD0AIgBmAG8AbwAiACAALwA+ACcALAAgACcAJAAxAEwATwBMACcAIAB8ACAATwB1AHQALQBGAGkAbABlACAAYwA6AFwAZgBvAG8ALgB4AG0AbAA=