Пакет: проверка количества параметров

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

@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