2012-01-16 11 views
8

Qui sto provando qualcosa di veramente semplice, ma non riesco a capire dove sto andando male. Ho trovato molte altre utili discussioni su questo - particularly here - ma non ho trovato nulla che copra il mio scenario specifico.PowerShell - passaggio di percorsi calcolati con spazi

in PowerShell, ho digitato il seguente:

$path = "c:\program files\" 
$path2 = "c:\program files\fred2\" 
echoargs $path $path2 
echoargs "$path" "$path2" 

In entrambe le chiamate verso echoargs, ottengo

Arg 0 is <c:\program files" c:\program> 
Arg 1 is <files\fred2"> 

indietro come il risultato. Come posso far passare correttamente i parametri?

NB: Nel mio vero script le variabili di percorso sono costituite da pochi parametri di configurazione, quindi non posso passarle direttamente tra virgolette singole.

+0

Si prega di inserire più del vostro codice vero e proprio. Quando ho provato il tuo esempio ho ottenuto 'c: \ program files \' e 'c: \ program files \ fred2 \' per entrambi. –

+0

@AndyArismendi molto strano. Ho appena copiato + incollato direttamente da questa domanda nel PowerShell ISE e ottenuto esattamente come ho descritto? quale versione di PowerShell stai usando? Sto usando 2.0 credo –

+0

Sì, ho appena definito una funzione da testare: 'function echoargs {$ args [0]; $ args [1]} '. –

risposta

18

È necessario racchiudere le stringhe di risultato in virgolette singole all'interno del campo di applicazione della esecuzione:

echoargs "'$path'" "'$path2'" 

Questo li passerà alla chiamata applicazione delimitato all'interno apici singoli, ma dal momento che l'intera stringa è ancora in doppia cita il tuo parametro verrà espanso correttamente.

+0

Ho trascorso un paio d'ore su questo problema. la singola combinazione doppia citazione finalmente ha funzionato! – Shadoninja

4

Nell'ultima goccia di PSCX abbiamo aggiornato EchoArgs.exe per mostrare anche l'intera riga di comando come l'app di ricezione lo vede. In questo caso, si ottiene:

 
14 > echoargs $path $path2 
Arg 0 is c:\program files" c:\program 
Arg 1 is files\fred2" 

Command line: 
"C:\Users\Keith\Documents\WindowsPowerShell\Modules\Pscx\Apps\EchoArgs.exe" "c:\program files\" "c:\program files\fred2 
\" 

sembrerebbe che il \" causa il doppio citazione finale per essere sfuggito qualche parte. BTW lo stesso accade in CMD.exe da quello che posso dire. Se hai modificato i tuoi percorsi per rimuovere la barra finale (o se hai usato barre), questo non accadrebbe.

 
20 > $path = "c:\program files" 
21 > $path2 = "c:\program files\fred2" 
22 > echoargs $path $path2 
Arg 0 is c:\program files 
Arg 1 is c:\program files\fred2 

Command line: 
"C:\Users\Keith\Documents\WindowsPowerShell\Modules\Pscx\Apps\EchoArgs.exe" "c:\program files" "c:\program files\fred2" 

Se si ottiene questi percorsi da qualche altra parte, è possibile rimuovere la barra rovesciata finale in questo modo:

$path = $path.TrimEnd("\") 
+0

che strano, grazie Keith. –

+0

+1 Per dare ulteriori dettagli sulla causa principale. – JNK

Problemi correlati