2012-04-24 35 views
7

Powershell có vẻ như bỏ các đối số chuỗi rỗng khi được truyền cho một lệnh. Tôi có mã nàyTruyền tham số trống cho các tệp thực thi bằng cách sử dụng powershell

PS D:\> $b.name = "foo bar" 
PS D:\> ./echoargs $b.name 
Arg 0 is D:\echoargs.exe 
Arg 1 is foo bar 
PS D:\> $b.name = "" 
PS D:\> ./echoargs $b.name 
Arg 0 is D:\echoargs.exe 

Bạn có thể giả định rằng $ b có một thành viên 'tên'. Làm thế nào tôi có thể vượt qua điều này như một đối số cho exe ngay cả khi giá trị là một chuỗi rỗng. Tôi đã thử sử dụng toán tử cuộc gọi mà không thành công.

Trả lời

7

Nếu bạn muốn một chuỗi rỗng xuất hiện thử thoát dấu ngoặc kép quanh lập luận như vậy:

PS> $b = [psobject]@{name = ''} 
PS> echoargs `"$($b.Name)`" 
Arg 0 is <> 

Command line: 
"C:\Users\Keith\Pscx\Trunk\Src\Pscx\bin\Release\Apps\EchoArgs.exe" "" 

Lưu ý rằng tôi thử nghiệm này trên V3 vì vậy tôi không chắc chắn nếu hành vi sẽ giống hệt nhau trên V2.

5

Cố gắng chuyển một chuỗi trích dẫn đơn trống kèm theo dấu ngoặc kép hoặc ngược lại.

./echoargs $b.name, "''" 

hoặc

./echoargs $b.name, '""' 
+1

Tôi đã thử nghiệm cả hai phương pháp trong PS v5 và phương thức đầu tiên không hoạt động, nhưng cách thứ hai đã làm: './echoargs $ b.name, '" "''. Dấu phẩy giữa các tham số dường như không cần thiết trong trường hợp của tôi. – hjoelr

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