Как известно, в bat файле оператор % позволяет получить только девять параметров командного файла:

echo %9

Считать значения десятого и последующих параметров тоже можно.

Сдвиг параметров командой SHIFT

Команда SHIFT

Изменение содержимого (сдвиг) подставляемых параметров для пакетного файла.

Команда SHIFT сдвигает нумерацию параметров, так что под теми же номерами %0-%9 оказываются уже параметры с первого по десятый.

Последующие вызовы SHIFT сдвигают параметры ещё дальше: со второго по одиннадцатый, затем с третьего по двенадцатый и т.д.

echo arg9=%9
shift
echo arg10=%9
shift
echo arg11=%9
shift
echo arg12=%9
shift
echo arg13=%9

В итоге bat файл успешно определяет и десятый параметр, и все остальные:

arg9=value9
arg10=value10
arg11=value11
arg12=value12
arg13=

При сдвиге дальше последнего параметра %9 возвращает пустое значение, в данном случае это 13-й параметр. Это позволяет определить, когда параметры закончились.

Сдвиг заданного числа параметров

Чтобы не двигать все параметры, у команды SHIFT есть специальный ключ:

SHIFT /n

Команда SHIFT при включении расширенной обработки команд поддерживает ключ /n, задающий начало сдвига параметров с номера n, где n может быть от 0 до 9.

Например, в следующей команде:

SHIFT /2

%3 заменяется на %2, %4 на %3 и т.д., а %0 и %1 остаются без изменений.

То есть можно указать, чтобы сдвигались не все параметры.

Включение расширенной обработки команд

Делается командой SETLOCAL ENABLEEXTENSIONS:

Пакетная команда SETLOCAL принимает необязательные аргументы:
ENABLEEXTENSIONS / DISABLEEXTENSIONS
Это позволяет включить или отключить расширенную обработку команд.
Эти аргументы переопределяют параметры CMD /E:ON или /E:OFF. Для
получения дополнительных сведений введите CMD /?.

Как видно из справки, расширенную обработку команд можно включить также через CMD /E:ON

Разбор командной строки

Этот способ получения параметров основан на чтении всей строки параметров %* в цикле FOR:

for %%A in (%*) do (
    echo %%A
)

Этот способ взят с StackOverflow.

Если добавить в цикл сохранение параметров, то можно сохранить все параметры в переменные с номерами:

setlocal enabledelayedexpansion
set /a arg_number=1
for %%a in (%*) do (
    set arg!arg_number!=%%a
    set /a arg_number=!arg_number!+1
)

echo arg1=%arg1%
echo arg10=%arg10%
echo arg11=%arg11%

Вывод:

arg1=value1
arg10=value10
arg11=value11

Другой вариант присваивания значений — сразу в цикле:

setlocal enabledelayedexpansion
set /a arg_number=1
for %%a in (%*) do (
    echo arg_!arg_number!=%%a
    if !arg_number! == 1 set filename=%%a
    if !arg_number! == 2 set directory=%%a
    rem ...
    if !arg_number! == 11 set computer_name=%%a
    set /a arg_number=!arg_number!+1
)
echo filename=%filename%
bat файл с 10 и более параметрами
Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *