如何在 PowerShell 单行代码中转义空格

How to escape spaces in a PowerShell one-liner

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

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

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

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

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


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

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

  • 另外,由于known problem with Start-Process,你需要额外的轮转义,这使解决方案非常晦涩难懂,因为 你必须将每个嵌入的 " 转义为 \"`\" (!).

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