2009-11-26 29 views
5

Tôi có một test.bat batch file để bắt đầu một kịch bản PowerShell:Sử dụng dơi để bắt đầu Powershell kịch bản

@pushd "C:\myscripts" 
powershell .\test.ps1 arg1 "arg2 with space" arg3 
@popd 

Kịch bản test.ps1 (nằm ở C: \ myscripts) là một trong rất đơn giản như:

# just print out the arguments 
Write-Output ("args count: {0}" -f $args.length) 
$args 

Sau đó, tôi đã thử bắt đầu test.bat. Tôi should get 3 arguments passed để ps1 nhưng got các following result:

args count: 5 arg1 arg2 với space arg3

What Tôi expected trong script, args [0] should arg1 và args [1] nên là "arg2 với không gian" và args3 [2] là arg3. Tôi không thể hiểu tại sao kịch bản thực sự nhận được 5 đối số.

Làm cách nào để chuyển các tham số từ cmd hoặc lô tới quyền hạn như những gì tôi mong đợi? Như thế này:

args count: 3 
arg1 
arg2 with space 
arg3 

Trả lời

7
powershell .\test.ps1 arg1 'arg2 with space' arg3 

hoặc

powershell .\test.ps1 arg1 """arg2 with space""" arg3 

Tôi nghĩ bạn nên cố gắng tránh sử dụng dấu ngoặc kép như cmd đã sử dụng chúng quá và do đó nó là một ít khó khăn để dự đoán chính xác những gì PowerShell sẽ nhận được . Hãy nhớ rằng điều này được chuyển qua hai vỏ và do đó hai lớp thoát/trích dẫn.

Chính PowerShell không tạo ra nhiều sự phân biệt giữa dấu nháy đơn và dấu ngoặc kép. Ít nhất trong bối cảnh này, sự khác biệt là không liên quan.

0

OK. Tôi nghĩ rằng tôi đã nhận nó:

@pushd "C: \ myscripts". PowerShell \ test.ps1 arg1 'arg2 với không gian' arg3 @popd

char dấu nháy đơn thay vì một đôi. Có lẽ họ có ý nghĩa khác nhau trong PS.

+0

Họ không. Nhưng chúng có nghĩa là những thứ khác nhau cho 'cmd'. – Joey

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