2012-01-16 33 views
8

Tôi đang thử một cái gì đó thực sự đơn giản ở đây, nhưng không thể tìm ra nơi tôi đang đi sai. Tôi đã tìm thấy nhiều cuộc thảo luận hữu ích khác về điều này - particularly here - nhưng không tìm thấy bất kỳ điều gì bao gồm trường hợp cụ thể của tôi.PowerShell - chuyển các đường dẫn được tính toán với dấu cách

Trong PowerShell, tôi đã gõ như sau:

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

Trong cả hai cuộc gọi đến echoargs, tôi nhận được

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

trở lại như kết quả. Làm thế nào tôi có thể nhận được các thông số được thông qua một cách chính xác?

NB: Trong kịch bản thực sự của tôi các biến đường dẫn được xây dựng từ một vài tham số cấu hình, vì vậy tôi không thể truyền trực tiếp chúng trong các dấu nháy đơn.

+0

Xin bao gồm nhiều mã thực tế của bạn. Khi tôi thử mẫu của bạn, tôi có các tệp 'c: \ program \ 'và' c: \ program files \ fred2 \ 'cho cả hai. –

+0

@AndyArismendi rất lạ. Tôi chỉ cần sao chép + dán trực tiếp từ câu hỏi này trở lại vào ISE powershell và đã chính xác như tôi mô tả? bạn đang sử dụng phiên bản nào của PowerShell? Tôi đang sử dụng 2,0 Tôi tin rằng –

+0

Tôi chỉ định nghĩa một hàm để kiểm tra: 'hàm echoargs {$ args [0]; $ args [1]} '. –

Trả lời

18

Bạn cần phải kèm theo chuỗi kết quả của bạn trong dấu nháy đơn trong phạm vi thực hiện:

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

này sẽ vượt qua chúng để ứng dụng có tên phân bên trong dấu ngoặc đơn, nhưng kể từ khi toàn bộ chuỗi vẫn còn trong đôi báo giá tham số của bạn sẽ được mở rộng chính xác.

+0

Tôi đã dành một vài giờ về vấn đề này. single combo quote kép cuối cùng cũng có mọi thứ hoạt động! – Shadoninja

4

Trong phiên bản mới nhất của PSCX, chúng tôi đã cập nhật EchoArgs.exe để hiển thị toàn bộ dòng lệnh khi ứng dụng nhận thấy nó. Trong trường hợp này, bạn nhận được:

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

Có vẻ như số \" đang khiến dấu ngoặc kép kép được thoát ở đâu đó. BTW cùng xảy ra trong CMD.exe từ những gì tôi có thể nói. Nếu bạn sửa đổi đường dẫn của bạn để loại bỏ dấu gạch chéo (hoặc nếu bạn sử dụng dấu gạch chéo về phía trước), điều này sẽ không xảy ra.

 
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" 

Nếu bạn nhận được các đường dẫn từ một nơi khác, bạn có thể loại bỏ các dấu chéo ngược trailing như vậy:

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

thật lạ lùng, cảm ơn Keith. –

+0

+1 Để biết thêm chi tiết về nguyên nhân gốc rễ. – JNK

Các vấn đề liên quan