Ответ 1
Я думаю, вы можете использовать Start-Process
:
Start-Process -FilePath $setupFilePath -ArgumentList '-a','-s','-f1"d:\some directory\with blanks in a path\fileVCCS.iss"' |
Wait-Process
Мне нужно запустить процесс из powershell script и передать такие параметры: -a -s f1d:\some directory\с пробелами в пути \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\с пробелами в пути \file.iss не проходит правильно. Помогите пожалуйста
Я думаю, вы можете использовать Start-Process
:
Start-Process -FilePath $setupFilePath -ArgumentList '-a','-s','-f1"d:\some directory\with blanks in a path\fileVCCS.iss"' |
Wait-Process
Я понимаю, что ваш вопрос: Как передать несколько аргументов для запуска процесса, когда один из аргументов имеет пробелы?
Я предполагаю, что эквивалент в пакетном файле 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
Таким образом, у вас не будет жестко закодированного абсолютного пути в середине длинной строки.
В 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"