我理解您的问题是:
如何传递多个参数来启动其中一个参数有空格的过程?
我假设 Windows 批处理文件中的等效项类似于:
"%setupFilePath%" -a -s -f1"d:\some directory\with blanks in a path\fileVCCS.iss"
其中双引号允许接收进程(在这种情况下为setupFilePath)接收三个参数:
-a
-s
-f1"d:\some directory\with blanks in a path\fileVCCS.iss"
为了使用您问题中的代码片段来完成此操作,我将使用反引号(在 1 的左侧和转义键下方,不要与单引号混淆;又名 Grave-accent)来转义这样的内部双引号:
$process = [System.Diagnostics.Process]::Start("$setupFilePath", "-a -s -f1`"d:\some directory\with blanks in a path\fileVCCS.iss`"")
$process.WaitForExit()
请注意,除了使用反引号之外,我还将参数列表周围的单引号更改为双引号。这是必要的,因为单引号不允许我们在这里需要的转义 ( http://ss64.com/ps/syntax-esc.html )。
亚伦的回答应该可以正常工作。如果不是,那么我猜setupFilePath没有-f1"d:\space here\file.ext"
按照您的预期进行解释。
意见警告我要添加到他的答案中的唯一一件事是建议使用双引号和反引号,以便允许在参数路径中使用变量-f1
:
Start-Process -FilePath $setupFilePath -ArgumentList '-a','-s',"-f1`"$pathToVCCS`"" |
Wait-Process
这样一来,您就不会在长线的中间有硬编码的绝对路径。