Truyền đối số dòng lệnh cho tập lệnh bó cửa sổ


10

Tôi cần tạo một tập lệnh bó cửa sổ nơi tôi cần truyền một vài đối số dòng lệnh. Các đối số này có thể xuất hiện theo bất kỳ thứ tự nào, nhưng tập lệnh sẽ chọn chúng đúng dựa trên tên đối số. Ví dụ.:

<scriptname> -age <agevalue> -gender <gender>
<scriptname> -gender <gender> -age <agevalue>

Kịch bản có thể được gọi theo bất kỳ cách nào trong hai cách trên nhưng độ tuổi và giới tính cần được chọn đúng và gán cho các biến. Các đối số có thể được xác định bởi công tắc trước chúng - tức là, -age, -gender, v.v.

Ai đó có thể xin vui lòng cho tôi một ví dụ về việc xác định nội bộ này?

Câu trả lời:


10

Thật không may, không có nội dung getops chức năng như làm. Tuy nhiên, bạn có thể thực hiện biến thể của người nghèo của mình:

:GETOPTS
 if /I %~1 == --age set AGE=%2& shift
 if /I %~1 == --gender set GENDER=%2& shift
 shift
if not (%1)==() goto GETOPTS

điều này có thể cồng kềnh vì số lượng đối số vượt quá nhưng nó phù hợp với dự luật. Cảm ơn
Dhiwakar Ravikumar

1
Tiếp theo robvanderwoude.com/if.php nó sẽ tốt hơn để viết if /I "%~1" == "--age" ... (lưu ý dấu ngã). Điều này cũng hoạt động cho các tham số trống hoặc tham số được đặt trong dấu ngoặc kép.
Axel Kemper

Bạn có thể muốn thêm dấu ngoặc kép. Mặt khác, câu lệnh không hoạt động với tham số trống% 1.
Axel Kemper

Nếu các đối số có thể khác nhau của bạn có định dạng hoặc loại được đặt, chẳng hạn như tuổi (là số) và giới tính (là "M" hoặc "F"), bạn không cần phải xác định đối số, nhưng thay vào đó hãy sử dụng nhận dạng so sánh để gán chúng các biến thích hợp trong tập lệnh. Tôi đã làm điều này cho một tập lệnh lô đầu tiên tôi đã viết trong giai đoạn chuyển tiếp giữa 9x và XP trong công việc CNTT đầu tiên của tôi. Tập lệnh có thể chấp nhận các đối số cho loại HĐH, ổ đĩa mà tập lệnh đang chạy và một số thứ khác hoặc nó có thể tự động phát hiện các cài đặt phù hợp. Một chút quá mức, nhưng một bài tập thú vị.
music2myear

8

Bạn có thể làm điều đó với Powershell? hoặc nó cần phải được hàng loạt? Powershell làm cho nó hay và dễ dàng, bạn chỉ cần thêm một cái gì đó như thế này vào đầu tập lệnh của mình, và sau đó bạn có thể gọi từng tham số theo bất kỳ thứ tự nào

param (
[string]$Age,
[string]$Gender
)

Bạn có thể làm điều đó với lô, nhưng nó sẽ yêu cầu rất nhiều kiểm tra tham số .. Dưới đây là một vài liên kết của một số tập lệnh bó làm việc đó

http://www.ericphelps.com/batch/samples/argument.bat.txt

(Có thể trùng lặp)

https


1
nó chỉ phải là tập lệnh bó :(. Chúng tôi có một yêu cầu nghiêm ngặt rằng đó là tập lệnh bó. Mặc dù vậy, cảm ơn rất nhiều :)
Dhiwakar Ravikumar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.