2009-09-30 46 views
15

Tôi muốn đảm bảo rằng khi gọi đến lô của mình, không quá 2 thông số được chuyển.Hàng loạt: Kiểm tra số tham số

Có cách nào dễ dàng để kiểm tra điều đó hay tôi phải gọi SHIFT nhiều lần nếu cần cho đến khi giá trị tham số trống?

+4

Xem http://stackoverflow.com/questions/1291941/batch-files-number -loại-dòng-đối số –

Trả lời

23

Bạn chỉ có thể kiểm tra sự tồn tại của một tham số thứ ba và hủy nếu có:

if not "%~3"=="" (
    echo No more than two arguments, please 
    goto :eof 
) 

Nhưng đặc biệt hơn, không có cách nào trực tiếp nhận số lượng đối số truyền cho một lô, viết tắt của shift ing và đếm chúng. Vì vậy, nếu bạn muốn đảm bảo rằng không có hơn 19 đối số được thông qua, thì bạn cần phải làm chính xác điều đó. Nhưng nếu số lượng đối số dự kiến ​​là dưới 9 phương pháp trên hoạt động tốt.

+0

Ngớ ngẩn tôi, thậm chí không nghĩ về một cách đơn giản như vậy! Cảm ơn! –

+0

thủ thuật này với [hình chữ nhật vuông] làm cho quirks của hàng loạt trông & cảm thấy phù hợp với các quirks của bash – n611x007

+0

Tốt hơn là sử dụng dấu ngoặc kép thay vì dấu ngoặc vuông, nhưng tôi khuyên bạn nên sử dụng '"% ~ 3 "' để tránh rắc rối với dấu ngoặc kép xung quanh tham số – jeb

5
IF NOT "%3"=="" GOTO Too_Many_Args 
1

Dưới đây là ví dụ nhỏ của tôi cho thu thập và phân tích một danh sách các đối số và đi đến lệnh bên ngoài:

@echo off 
setlocal enabledelayedexpansion 

if %1. EQU . (
    echo %~0 [-t NUM] FILE [FILE...] 
    goto end 
) 

:args_loop 
if "%~1" EQU "-t" (
    set arg_t=%1 
    set arg_t_val=%2 
    shift 
) else (
    set files=!files! %1 
) 
shift 
if %1. NEQ . goto args_loop 

:args_loop_end 

x:\path\to\external.exe %arg_t% %arg_t_val% %files% 

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