14

我需要从 powershell 脚本启动一个进程并传递这样的参数: -a -s f1d:\some directory\with blanks in a path\file.iss 为此,我编写了以下代码:

$process = [System.Diagnostics.Process]::Start("$setupFilePath", '-a -s -f1"d:\some directory\with blanks in a path\fileVCCS.iss"') 
$process.WaitForExit()

结果该过程开始,但最后一个参数: -f1d:\some directory\with blanks in a path\file.iss 未正确传递。请帮忙

4

3 回答 3

10

我认为您可以使用Start-Process

Start-Process -FilePath $setupFilePath -ArgumentList '-a','-s','-f1"d:\some directory\with blanks in a path\fileVCCS.iss"' |
    Wait-Process
于 2013-07-10T03:49:08.440 回答
5

我理解您的问题是: 如何传递多个参数来启动其中一个参数有空格的过程?

我假设 Windows 批处理文件中的等效项类似于:

"%setupFilePath%" -a -s -f1"d:\some directory\with blanks in a path\fileVCCS.iss"

其中双引号允许接收进程(在这种情况下为setupFilePath)接收三个参数:

  1. -a
  2. -s
  3. -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

这样一来,您就不会在长线的中间有硬编码的绝对路径。

于 2015-02-07T03:59:30.483 回答
2

在 PowerShell v3 上,这有效:

& $setupFilePath -a -s -f1:"d:\some directory\with blanks in a path\fileVCCS.iss"

使用PSCX echoargs 命令显示:

25> echoargs.exe -a -s -f1"d:\some directory\with blanks in a path\fileVCCS.iss"
Arg 0 is <-a>
Arg 1 is <-s>
Arg 2 is <-f1d:\some directory\with blanks in a path\fileVCCS.iss>

Command line:
"C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx\Apps\EchoArgs.exe"  -a -s "-f1d:\some directory\with blanks in a path\fileVCCS.iss"

在 V2 中使用 - 请注意在最后一个双引号上添加了一个反引号:

PS> echoargs.exe -a -s -f1"d:\some directory\with blanks in a path\fileVCCS.iss`"
Arg 0 is <-a>
Arg 1 is <-s>
Arg 2 is <-f1d:\some directory\with blanks in a path\fileVCCS.iss>

Command line:
"C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx\Apps\EchoArgs.exe"  -a -s -f1"d:\some directory\with blanks in a path\fileVCCS.iss"
于 2013-07-10T01:13:07.683 回答