2013-07-09 13 views
12

Muszę rozpocząć proces ze skryptu powłoki Powerhell i przekazać takie parametry: -a -s f1d: \ some katalog \ ze spacjami w ścieżce \ file.iss do zrobić, napisać kod folowing:Rozpocznij proces z argumentami, które zawierają ścieżkę z pustymi znakami.

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

w rezultacie rozpoczęciem procesu, ale ostatni argument: -f1d: \ katalog \ trochę z półfabrykatów w ścieżce \ file.iss nie przechodzi poprawnie. Pomocy, proszę

+0

Spróbuj użyć polecenia cmdlet 'Start-Process'. 'Start-Process -FilePath" yourPath "-ArgumentList" arg1 arg2 "' – Naigel

+0

triyng ale bez powodzenia. Czy możesz dać przykład? – vklu4itesvet

Odpowiedz

2

Na PowerShell v3, to działa:

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

Używanie PSCX echoargs dowodzić pokazuje to:

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" 

o użytkowaniu V2 - uwaga dodanie grawis na ostatniej podwójnej cytat:

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" 
+0

Muszę użyć maksimum powershell v2 i nie działa tam – vklu4itesvet

+0

Jeśli potrzebujesz go do pracy na 2.0, umieść zwrotka 'przed ostatnim podwójnym cudzysłowem. –

9

Myślę, że można użyć Start-Process:

Start-Process -FilePath $setupFilePath -ArgumentList '-a','-s','-f1"d:\some directory\with blanks in a path\fileVCCS.iss"' | 
    Wait-Process 
+0

Powyższy kod nie działa w moim przypadku. Działa tylko wtedy, gdy parametr "-f1" d: \ some katalog \ z pustymi miejscami w ścieżce \ fileVCCS.iss "" zawiera ścieżkę bez spacji – vklu4itesvet

+0

Czy możesz zaktualizować swoje pytanie za pomocą otrzymywanego komunikatu o błędzie? –

+0

w rzeczywistości nie ma żadnego komunikatu o błędzie. Ustalam, że nie działa tak, jak chcę, ponieważ jeśli uruchomi się plik wykonywalny $ setupFilePath z niepoprawną ścieżką, działa, ale w inny sposób niż oczekiwano. Próbowałem również przekazać właściwą ścieżkę (bez spacji) i działało tak, jak chcę – vklu4itesvet

5

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:

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

Powiązane problemy