2012-01-16 19 views
8

Próbuję tutaj czegoś naprawdę prostego, ale nie mogę się dowiedzieć, gdzie idę źle. Znalazłem wiele innych przydatnych dyskusji na ten temat - particularly here - ale nie znalazłem niczego, co obejmowałoby mój konkretny scenariusz.PowerShell - przekazywanie obliczonych ścieżek ze spacjami

PowerShell, mam wpisane następujące:

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

W obu połączeń do echoargs, mam

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

powrotem jako wynik. Jak mogę poprawnie przekazać parametry?

NB: W moim prawdziwym skrypcie zmienne ścieżki są zbudowane z kilku parametrów konfiguracyjnych, więc nie mogę po prostu przekazać ich bezpośrednio w apostrofach.

+0

Proszę podać więcej od rzeczywistego kodu. Kiedy wypróbowałem twoją próbkę, otrzymałem dla nich "c: \ program files \" i "c: \ program files \ fred2 \". –

+0

@AndyArismendi bardzo dziwne. Właśnie skopiowałem + wkleiłem bezpośrednio z tego pytania z powrotem do ISE PowerShell i otrzymałem dokładnie tak, jak to opisałem? z której wersji PowerShell korzystasz? Używam 2.0 Wierzę –

+0

Tak właśnie zdefiniowałem funkcję do testowania: 'function echoargs {$ args [0]; $ args [1]} '. –

Odpowiedz

18

Trzeba załączyć swoje struny spowodować apostrofami wewnątrz zakresu wykonania:

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

ten przekaże je do wywoływanego stosowania ograniczonej wewnątrz pojedynczych cudzysłowów, ale ponieważ cały łańcuch jest nadal w podwójne Cytaty: Twój parametr zostanie poprawnie rozwinięty.

+0

Spędziłem kilka godzin w tej sprawie. połączenie z podwójnym podwójnym cytatem wreszcie sprawiło, że wszystko działało! – Shadoninja

4

W najnowszej wersji PSCX zaktualizowaliśmy plik EchoArgs.exe, aby wyświetlić całą linię poleceń, tak jak widzi ją aplikacja odbierająca. W tym przypadku, można uzyskać:

 
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 
\" 

Wydawać by się mogło, że \" powoduje tylna cudzysłów być gdzieś uciekł. Przy okazji to samo dzieje się w CMD.exe z tego, co mogę powiedzieć. Jeśli zmodyfikowałeś swoje ścieżki, aby usunąć ukośny ukośnik (lub użyłeś ukośników), to by się nie stało.

 
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" 

Jeśli masz te ścieżki gdzieś indziej, można usunąć odwrotny ukośnik tyłu tak:

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

jak dziwnie, dzięki Keith. –

+0

+1 Dając trochę więcej szczegółów na temat głównej przyczyny. – JNK

Powiązane problemy