for
lệnh nên cung cấp cho bạn những gì bạn muốn:
for /f "tokens=1,2*" %%a in ("%*") do echo command -Duser=%%a -Dpwd=%%b %%c
Từ sự giúp đỡ cho for
(for /?
):
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
sẽ phân tích mỗi dòng trong myfile.txt, bỏ qua dòng bắt đầu với một dấu chấm phẩy, chuyển mã thông báo thứ 2 và thứ 3 từ mỗi dòng đến cho nội dung , với mã thông báo được phân tách bằng dấu phẩy và/hoặc dấu cách. Lưu ý rằng đối với báo cáo nội dung số tham chiếu% i để nhận mã thông báo thứ 2,% j để nhận mã thông báo thứ 3 và% k để nhận tất cả các mã còn lại sau ngày thứ 3. Đối với tên tệp có chứa dấu cách, bạn cần phải báo giá tên tệp với dấu ngoặc kép là . Để sử dụng dấu ngoặc kép theo cách này, bạn cũng cần cần sử dụng tùy chọn usebackq, nếu không dấu ngoặc kép sẽ là được hiểu là xác định chuỗi ký tự để phân tích cú pháp.
Vì vậy, trong giải pháp của tôi, %%a
có giá trị của các đối số đầu tiên truyền cho các kịch bản, %%b
giá trị của đối số thứ hai, và %%c
các đối số còn lại.
Khi tôi chạy batch.bat USR PWD -Dargument1=1 -Dargument2=2
từ một dấu nhắc lệnh tôi nhận được:
command -Duser=USR -Dpwd=PWD -Dargument1=1 -Dargument2=2
Tháo echo
sau do
để gọi lệnh của bạn với các đối số.
Nguồn
2012-09-07 13:32:38
Điều này hoạt động miễn là không phải trong số 2 đối số đầu tiên chứa dấu cách được trích dẫn. Nhưng nó sẽ thất bại nếu một trong hai đối số chứa dấu cách được trích dẫn - có thể không phải là vấn đề với tên người dùng hoặc mật khẩu, đặt chắc chắn không được chấp nhận làm giải pháp chung. – dbenham
@dbenham; bạn là chính xác, vượt qua bất kỳ loại chuỗi trích dẫn nào và tất cả các phiên cược đều bị tắt. –
Trên thực tế trích dẫn args là OK miễn là các dấu ngoặc kép được cân bằng và arg không chứa dấu cách hoặc ký tự đặc biệt như '&' '|' v.v .. Một vấn đề tiềm năng khác - đối số cũng có thể được phân tách bằng ',' ';' hoặc '=' thay vì không gian. – dbenham