Trong nhiều năm, tôi đã sử dụng cmd/DOS/Windows
shell và truyền các đối số dòng lệnh cho các tệp hàng loạt. Ví dụ, tôi có một tập tin, zuzu.bat
và trong đó, truy cập tôi %1
, %2
vv Bây giờ, tôi muốn làm điều tương tự khi tôi gọi một PowerShell
kịch bản when I am in a Cmd.exe shell
. Tôi có một tập lệnh xuxu.ps1
(và tôi đã thêm PS1 vào biến PATHEXT của mình và các tệp PS1 được liên kết với PowerShell). Nhưng bất kể tôi làm gì, tôi dường như không thể nhận được bất cứ điều gì từ $args
biến. Nó luôn có độ dài 0.
Nếu tôi ở trong một trình PowerShell
bao, thay vì cmd.exe
, nó hoạt động (tất nhiên). Nhưng tôi vẫn chưa đủ thoải mái để sống trong môi trường PowerShell toàn thời gian. Tôi không muốn gõ powershell.exe -command xuxu.ps1 p1 p2 p3 p4
. Tôi muốn gõ xuxu p1 p2 p3 p4
.
Điều này có khả thi không, và nếu có thì làm thế nào?
Mẫu mà tôi không thể làm việc là tầm thường, foo.ps1:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args) {
Write-Host "Arg: $arg";
}
Kết quả luôn như thế này:
C:\temp> foo
Num Args: 0
C:\temp> foo a b c d
Num Args: 0
c:\temp>
xuxu p1 p2 p3 p4
").