使用shift批量解析可选参数

时间:2016-09-27 07:56:29

标签: batch-file parameter-passing

我想知道是否可以为接受来自另一个脚本的参数的批处理文件制作更优雅的解决方案。 看看这里的解决方案:Windows Bat file optional argument parsing,但无法使其发挥作用。

我有19个参数传递给批处理文件。来自7日的参数是可选的(来自复选框)。

我有一个使用此结构的工作代码:

REM arg7 parsing 
set LOGFILE=%7
if not "%LOGFILE%" == "LOGFILE" (
    set LOGFILE= 
) else ( 
shift /7 
)
REM arg8 parsing 
set ARG8=%7
if not "%ARG8%" == "ARG8" (
    set ARG8= 
) else ( 
   shift /7 
)
REM arg9 parsing 
set ARG9=%7
if not "%ARG9%" == "ARG9" (
  set ARG9= 
) else ( 
  shift /7 
)

等每个可选参数。

但是现在有很多相似代码的行,我觉得它可以以某种方式进行优化。我对批处理脚本不太熟悉,所以我尝试将参数存储在列表中并尝试应用上述解决方案并不起作用。

2 个答案:

答案 0 :(得分:1)

根据您发布的内容,试试这个:

SET "_="
FOR %%I IN (
    LOGFILE ARG8 ARG9
    ) DO IF "%7" EQU "%%I" (SET "%%I=%7" & SET _=T)
IF DEFINED _ SHIFT /7

只需在第三行插入其他参数即可。

答案 1 :(得分:1)

@echo off
REM process optional parameters:
shift&shift&shift&shift&shift 
rem shift /5  :: couldn't get this to work...

set narg=6
:loop
shift
set /a narg+=1
if "%1" == "" goto :done
set arg%narg%=%1
goto :loop

:done
echo no more parameters
set arg