rozumiem Twoje pytanie będzie: Jak przekazać wiele argumentów, aby rozpocząć proces, w którym jeden z argumentów ma miejsca?
Jestem zakładając równowartość w pliku wsadowym systemu Windows będzie coś takiego:
"%setupFilePath%" -a -s -f1"d:\some directory\with blanks in a path\fileVCCS.iss"
gdzie cudzysłowy umożliwić proces odbiorczej (setupFilePath w tym przypadku), aby otrzymać trzy argumenty:
-a
-s
-f1"d:\some directory\with blanks in a path\fileVCCS.iss"
Aby to osiągnąć z fragmentem kodu w swoim pytaniu użyłbym powrotem kleszczy (się po lewej stronie 1 i poniżej klawisza escape, nie należy mylić z jednym cytatem; aka Grave-akcent) uciec wewnętrznych cudzysłowów tak:
$process = [System.Diagnostics.Process]::Start("$setupFilePath", "-a -s -f1`"d:\some directory\with blanks in a path\fileVCCS.iss`"")
$process.WaitForExit()
Należy pamiętać, że oprócz korzystania z powrotem kleszczy Ja również zmienił apostrofów wokół listy argumentów do cudzysłowach. Było to konieczne, ponieważ pojedyncze cudzysłowy nie zezwalają na potrzebne ci eskapowania (http://ss64.com/ps/syntax-esc.html).
Aaron's answer powinien działać dobrze. Jeśli nie, to domyślam się, że setupFilePath nie interpretuje -f1"d:\space here\file.ext"
zgodnie z oczekiwaniami.
OPINIA ALERT Jedyną rzeczą, którą chciałbym dodać do jego odpowiedź jest zaproponowanie użyciem cudzysłowów iz powrotem kleszczy w celu umożliwienia użyciu zmiennej w obrębie ścieżki dla argumentu -f1
:
Start-Process -FilePath $setupFilePath -ArgumentList '-a','-s',"-f1`"$pathToVCCS`"" |
Wait-Process
ten sposób nie będzie mieć zakodowanej, bezwzględnej ścieżki w środku długiej linii.
Spróbuj użyć polecenia cmdlet 'Start-Process'. 'Start-Process -FilePath" yourPath "-ArgumentList" arg1 arg2 "' – Naigel
triyng ale bez powodzenia. Czy możesz dać przykład? – vklu4itesvet