2013-05-03 11 views
6

Tôi biết tôi có thể nhận được đối số đầu tiên với% 0, thứ hai với% 1, v.v .. Và tôi cũng có thể nhận tất cả các đối số bằng% *.Làm cách nào để nhận được phần còn lại của các đối số trong tệp loạt cửa sổ?

Tôi có thể lấy tất cả đối số từ đối số thứ hai không? Ví dụ: nếu tôi chạy

foo.bat bar1 bar2 bar3 bar4 

Làm cách nào để chỉ nhận được bar2 bar3 bar4?

Trả lời

3

Với lệnh SHIFT. Nhưng với mọi thay đổi bạn sẽ mất đầu tiên. này sẽ không thay đổi %* nhưng bạn sẽ có thể để có được tất cả các đối số, nhưng là người đầu tiên:

@echo off 
shift 

set "arg_line= " 
:parse_args 
if "%~1" NEQ "" (
arg_line=%argline% "%~1" 
goto :parse_args 
) 

bây giờ bạn sẽ có tất cả các đối nhưng là người đầu tiên được lưu giữ trong %arg_line%

0

Bạn cần phải sử dụng SHIFT. Nó di chuyển vị trí rõ ràng của các tham số, sau đó %* sẽ nhận được tất cả các thông số từ vị trí chuyển sang. Bạn sẽ nhận được thông số đầu tiên trước khi sử dụng SHIFT.

More information trên SHIFT.

+3

Nó sai, 'SHIFT' chỉ ảnh hưởng'% 0,% 1,% 2 ...% 9' nhưng không phải '% *' – jeb

6
@ECHO OFF 
SETLOCAL 
SET allargs=%* 
IF NOT DEFINED allargs echo no args provided&GOTO :EOF 
SET arg1=%1 
CALL SET someargs=%%allargs:*%1=%% 
ECHO allargs %allargs% 
ECHO arg1  %arg1% 
ECHO someargs %someargs% 

này sẽ để lại SOMEARGS với ít nhất một tách hàng đầu (nếu nó được thiết lập)

+0

Tốt đẹp nhưng ý bạn là 'echo' (ở dòng thứ tư)? – user2033427

+0

@ user2033427 yeah - cố định. – Magoo