如何在PowerShell一线式中转义空间

时间:2018-07-30 14:42:03

标签: windows powershell escaping quoting

我想使用powershell一行运行带有参数的exe,就像这样-

powershell -ExecutionPolicy Unrestricted "Start-Process -Path program.exe -ArgumentList somefile.txt, Run"

它可以工作,但是当我尝试插入带有空格的完整路径时,它会崩溃

powershell -ExecutionPolicy Unrestricted "Start-Process -Path program.exe -ArgumentList "C:\Program Files\somefile.txt", "Run" "

我尝试使用单引号或将`进行转义,但这无济于事

也许有人知道我做错了吗?

P.s。从cmd.exe内部运行

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是对嵌入的字符串使用引号('...'

powershell -ExecutionPolicy Unrestricted "Start-Process -Path program.exe -ArgumentList 'C:\Program Files\somefile.txt', 'Run'"

由于是PowerShell将解释命令字符串,因此它将嵌入的'...'字符串识别为字符串文字。


如果您尝试嵌入用引号的字符串("..."),则会遇到两个障碍:

  • 首先,PowerShell的 CLI 要求\作为"的转义字符(而内部` ),因此您需要将"整个命令字符串中的"..."转换为\"

  • 另外,由于known problem with Start-Process,您需要进行转义的额外回合,这使解决方案变得晦涩难懂,因为< strong>您必须以" (!)的形式隐藏每个嵌入的\"`\"

powershell -ExecutionPolicy Unrestricted "Start-Process -Path program.exe -ArgumentList \"`\"C:\Program Files\somefile.txt\"`\", \"`\"Run\"`\" "