2013-07-09 15 views
12

Ho bisogno di avviare un processo da uno script PowerShell e passare tali parametri: -a -s f1d: \ qualche directory \ con spazi vuoti in un percorso \ file.iss a farlo, scrivo il codice folowing:Avvia processo con args che contiene un percorso con spazi vuoti

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

di conseguenza il processo inizia, ma l'ultimo argomento: -f1d: \ alcune directory \ con spazi vuoti in un percorso \ file.iss non passa correttamente. Aiuto, si prega di

+0

Provare a utilizzare il cmdlet 'Start-Process'. 'Start-Process -FilePath" yourPath "-ArgumentList" arg1 arg2 "' – Naigel

+0

triyng ma senza successo. Puoi fare un esempio? – vklu4itesvet

risposta

2

Su PowerShell v3, questo funziona:

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

Utilizzando le PSCX echoargs comando mostra questo:

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" 

On uso V2 - notare l'aggiunta di un apice inverso l'ultimo doppio quote:

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

Ho bisogno di usare max powershell v2 e non funziona lì – vklu4itesvet

+0

Se ne hai bisogno per lavorare su 2.0, metti un backtick 'prima dell'ultima virgoletta doppia. –

9

Penso che sia possibile utilizzare Start-Process:

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

Il codice sopra non funziona nel mio caso. Funziona solo se un parametro '-f1 "d: \ qualche directory \ con spazi vuoti in un percorso \ fileVCCS.iss"' contiene un percorso senza spazi. – vklu4itesvet

+0

Puoi aggiornare la tua domanda con il messaggio di errore che stai ricevendo? –

+0

in realtà non ci sono messaggi di errore. Determinato di quanto non funzioni come voglio, perché se si avvia $ setupFilePath eseguibile con percorso errato funziona ma in altro modo poi previsto. Ho anche provato a passare un percorso corretto (senza spazi vuoti) e ha funzionato come voglio – vklu4itesvet

5

ho capito la tua domanda sia: Come passare più argomenti per avviare un processo in cui uno degli argomenti ha spazi?

Sto assumendo l'equivalente in un file batch di Windows sarebbe qualcosa di simile:

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

dove le virgolette consentono il processo di ricezione (setupFilePath in questo caso) per ricevere tre argomenti:

  1. -a
  2. -s
  3. -f1"d:\some directory\with blanks in a path\fileVCCS.iss"

per raggiungere questo obiettivo con il frammento di codice nella sua domanda vorrei usare di nuovo le zecche (alla sinistra del 1 e sotto il tasto Esc, da non confondere con una sola offerta; aka Grave-accento) per sfuggire le virgolette doppie interne come questo:

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

Si noti che oltre a utilizzare di nuovo le zecche Ho cambiato anche le virgolette singole intorno alla vostra lista di argomenti a doppi apici. Ciò era necessario perché le virgolette singole non consentono le fughe di cui abbiamo bisogno qui (http://ss64.com/ps/syntax-esc.html).

Aaron's answer dovrebbe funzionare bene. In caso contrario, suppongo che setupFilePath non interpreti -f1"d:\space here\file.ext" come previsto.

PARERE ALERT L'unica cosa che vorrei aggiungere alla sua risposta è di suggerire utilizzando i doppi apici e zecche di nuovo, al fine di consentire l'utilizzo di una variabile all'interno del percorso per la discussione -f1:

Start-Process -FilePath $setupFilePath -ArgumentList '-a','-s',"-f1`"$pathToVCCS`"" | 
Wait-Process 

In questo modo si non avrà un percorso assoluto e codificato nel mezzo di una lunga linea.

Problemi correlati