如何在PowerShell的Start-Process中处理含空格的外部进程路径
处理Start-Process中含空格的路径问题
这个问题的核心是PowerShell会将空格视为参数分隔符,当你传递带空格的路径时,它会被拆分成多个独立的参数,导致系统无法识别完整的路径。下面是几种可靠的解决方法:
方法1:用单引号包裹路径
将路径用单引号括起来,这样PowerShell会把整个路径当作一个字面量参数传递,不会拆分空格:
$path = "C:\Program Files (x86)\CustomApp\Server.exe" Start-Process -FilePath powershell.exe -ArgumentList "& '$path'; Read-Host"
单引号在PowerShell中表示“原样输出”,不会解析内部的变量或特殊字符,非常适合处理带空格的路径场景。
方法2:用反引号转义双引号
如果你更习惯用双引号,需要用反引号(`)转义双引号,确保新启动的PowerShell进程能识别完整的路径:
$path = "C:\Program Files (x86)\CustomApp\Server.exe" Start-Process -FilePath powershell.exe -ArgumentList "-Command & `"$path`"; Read-Host"
这里的"会被解析为双引号,最终传递给新进程的参数是& "C:\Program Files (x86)\CustomApp\Server.exe"; Read-Host,路径被正确包裹。
为什么原来的写法会报错?
你之前的代码中,& $path会被展开为:
& C:\Program Files (x86)\CustomApp\Server.exe
PowerShell会把C:\Program当作命令,Files、(x86)等当作额外参数,自然会报错“术语‘x86’未被识别”——因为它根本没把整个字符串当作路径。
额外提示:直接启动目标程序(如果不需要嵌套PowerShell)
如果你的需求只是启动Server.exe,其实可以跳过嵌套PowerShell,直接用Start-Process启动目标路径,此时PowerShell会自动处理空格:
$path = "C:\Program Files (x86)\CustomApp\Server.exe" Start-Process -FilePath $path
内容的提问来源于stack exchange,提问作者LightningWar
相关产品推荐
相关产品推荐

