将带有开关的参数传递给批处理文件

Cha*_*adD 5 windows batch-file

无论指定A和B的顺序如何,我如何显示与开关A和开关B相关的值?

考虑以下对批处理文件ParamTest.cmd的调用:

C:\Paramtest.cmd \A valueA \B valueB
Run Code Online (Sandbox Code Playgroud)

这是C:\ Paramtest.cmd的内容:

ECHO Param1=%1
ECHO Param2=%2

ECHO Param3=%3
ECHO Param4=%4
Run Code Online (Sandbox Code Playgroud)

输出:

Param1=\A 
Param2=valueA
Param3=\B
Param4=valueB
Run Code Online (Sandbox Code Playgroud)

我希望能够识别它们的交换机名称A和B传递的两个值,而不管这些交换机的传递顺序如何

例如,如果我执行以下调用:

C:\Paramtest.cmd \B valueB \A valueA
Run Code Online (Sandbox Code Playgroud)

我希望能够展示

A=ValueA
B=ValueB
Run Code Online (Sandbox Code Playgroud)

..即使我在切换参数顺序的情况下调用批处理文件,也有相同的输出:

C:\ Paramtest.cmd\valueA\B valueB

我该怎么做呢?

And*_*y M 8

简而言之,您需要定义一个循环并成对处理参数.

我通常使用涉及标签和GOTO以及SHIFT的方法处理参数列表,基本上如下:

…
SET ArgA=default for A
SET ArgB=default for B

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

:continue
…
Run Code Online (Sandbox Code Playgroud)

也可以使用%*掩码和FOR循环处理参数,如下所示:

…
SET ArgA=default for A
SET ArgB=default for B

FOR %%p IN (%*) DO (
  IF [%%p] == [/A] …
  IF [%%p] == [/B] …
)
…
Run Code Online (Sandbox Code Playgroud)

但是对于你的情况来说这有点困难,因为你需要成对处理参数.在我看来,第一种方法更灵活.