【问题标题】:Optional arguments parsed in batch using shift使用 shift 批量解析的可选参数
【发布时间】:2016-09-27 07:56:29
【问题描述】:

我想知道是否可以为从另一个脚本接受参数的批处理文件提供更优雅的解决方案。 在这里查看了解决方案: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 
)

对于每个可选参数,依此类推。

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

【问题讨论】:

  • 你的问题是关于优化很多行,如果你不提供很多行,我们应该如何优化它们。 IF "%7" EQU "LOGFILE" SHIFT /7
  • 对于具有不同参数名称的 12 个参数,它是完全相同的行。但是感谢您的评论,我将对其进行编辑以使其更加明显。
  • 请不要我还提供了一个与您的示例相同的 sn-p
  • 如果不等于“%7”,您的示例不会重置该值。无论如何,我将不得不编写 12 行相同的代码。不是完美的优化 imo。
  • 我的例子没有设置值,所以不需要重置它! IF "%7" EQU "LOGFILE" ((SET LOGFILE=%7) & SHIFT /7)

标签: batch-file parameter-passing


【解决方案1】:

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

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

显而易见,只需在第三行插入其他参数即可。

【讨论】:

  • 这就是我一直在寻找的,如果与循环一起使用,它就可以工作:) 谢谢!
【解决方案2】:
@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

【讨论】:

  • 我不得不将你的答案与上面的答案结合起来。我不想触及非可选参数,因此 Compo 有更好的参数处理版本。从你那里我使用了循环并得到了一个可行的解决方案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2022-07-24
  • 2016-05-30
  • 2021-11-03
  • 2014-10-28
  • 2010-11-06
  • 1970-01-01
相关资源
最近更新 更多