首页 > 解决方案 > 如何在 PowerShell 单行中转义空格

问题描述

我想使用 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" "

我尝试使用单引号或使用 ` 转义,但这没有帮助

也许有人知道我做错了什么?

Ps 从 cmd.exe 内部运行

标签: windowspowershellescapingquoting

解决方案


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

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

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


如果您尝试嵌入引号字符串 ( "..."),您将面临两个障碍:

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

  • 此外,由于 的一个已知问题Start-Process,您需要额外的一轮转义,这使得解决方案非常模糊和笨拙,因为您必须将每个嵌入转义"\"`\"(!)。

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

推荐阅读