2009-09-30 3 views
15

Я хотел бы убедиться, что при вызове моей партии не более двух параметров передаются.Пакет: проверка количества параметров

Есть ли простой способ проверить это или мне нужно называть SHIFT столько раз, сколько необходимо, пока значение параметра не будет пустым?

+4

См http://stackoverflow.com/questions/1291941/batch-files-number -of-command-line-arguments –

ответ

23

Вы можете просто проверить существование третьего параметра и отменить, если присутствует:

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

Но более конкретно, не существует прямой способ получения количества аргументов, передаваемых в пакетном режиме, не хватает shift Инг и подсчет их. Поэтому, если вы хотите убедиться, что передано не более 19 аргументов, вам нужно сделать именно это. Но если число ожидаемых аргументов ниже 9, метод работает хорошо.

+0

Глупый я, даже не думал о таком простом пути! Спасибо! –

+0

этот трюк с [квадратными скобками] выглядит так, чтобы причуды партии выглядели и чувствовали себя в соответствии с причудами bash. – n611x007

+0

Лучше использовать кавычки вместо квадратных скобок, но я бы рекомендовал использовать ''% ~ 3'', чтобы избежать проблем с кавычками вокруг параметр – jeb

1

Вот мой небольшой пример для сбора и разбора списка аргументов и переходя к внешней команде:

@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 
Смежные вопросы