Передача параметров с переключателями в командный файл - PullRequest
5 голосов
/ 03 июня 2011

Как отобразить значение, связанное с переключателем A и переключателем B, независимо от порядка, в котором были указаны A и B?

Рассмотрим следующий вызов пакетного файла ParamTest.cmd:

C:\Paramtest.cmd \A valueA \B valueB

Вот содержимое C: \ Paramtest.cmd:

ECHO Param1=%1
ECHO Param2=%2

ECHO Param3=%3
ECHO Param4=%4

Вывод:

Param1=\A 
Param2=valueA
Param3=\B
Param4=valueB

Я бы хотел иметь возможность идентифицировать TWO значения, передаваемые по их именам ключей, A и B, независимо от порядка, в котором эти ключи были переданы

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

C:\Paramtest.cmd \B valueB \A valueA

Я бы хотелиметь возможность отображать

A=ValueA
B=ValueB

.. и иметь тот же вывод, даже если я вызвал пакетный файл с переключенным порядком параметров:

C: \ Paramtest.cmd \ A valueA \ Bзначение B

Как мне это сделать?

1 Ответ

8 голосов
/ 03 июня 2011

Короче говоря, вам нужно определить цикл и обработать параметры попарно.

Обычно я обрабатываю список параметров, используя подход, который включает метки и GOTO, а также SHIFT, в основном так:

…
SET ArgA=<i>default for A</i>
SET ArgB=<i>default for B</i>

:loop
IF [%1] == [] GOTO continue
IF [%1] == [/A] …
IF [%1] == [/B] …
SHIFT & GOTO loop

:continue
…

Также возможно обрабатывать параметры, используя маску %* и цикл FOR, например:

…
SET ArgA=<i>default for A</i>
SET ArgB=<i>default for B</i>

FOR %%p IN (%*) DO (
  IF [%%p] == [/A] …
  IF [%%p] == [/B] …
)
…

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...