如何在bat文件中添加可选的命令行参数(windows)

时间:2013-10-22 06:34:47

标签: batch-file

我有一个批处理文件,其中包含以下参数的硬编码

  

SET upgrade = false

我想给用户一个明确定义upload参数的选项。默认情况下,它应该是false,如果用户明确定义upgrade=true,我应该将其视为true。

我还想检查upload参数中布尔值的验证。

我是批处理文件处理的新手。我尝试过使用默认值处理。

if "%2"=="" goto false

:false
SET upgrade=false

4 个答案:

答案 0 :(得分:7)

检查是否存在变量。如果不存在,则假设为假。任何与“true”不同的值都是假的

if not defined upgrade set upgrade=false
if not "%upgrade%"=="true" set upgrade=false

当升级变量需要为true时,在调用批处理文件之前定义它,从命令行开始o使用第二个批处理文件调用第一个设置值的文件。

因此,主批(ej.doWork.cmd)文件将显示为

@echo off
    .... work work work ...
    if not defined upgrade set upgrade=false
    if not "%upgrade%"=="true" set upgrade=false
    .... work work work ...

当您需要从另一个配置开始时(在此示例中进行升级),您需要从命令行配置变量

set upgrade=true 
doWork.cmd

或者你可以创建第二个cmd来做同样的事情(ej.doWorkWithUpload.cmd)

@echo off
    set upgrade=true
    call doWork.cmd

答案 1 :(得分:6)

很简单,试试吧。要将升级设置为true,请使用/U作为参数:

@echo off
set upgrade=FALSE
:parse
if /i "%1" EQU "/u" set upgrade=TRUE
if /i "%1" EQU "/?" Echo HELP MSG & goto :eof

if "%1" NEQ "" (shift /1 & goto :parse)

然后您可以添加其余代码。

答案 2 :(得分:2)

每当我想在批处理脚本中使用布尔值时,我使用缺少变量来表示FALSE,并且变量(任何值)的存在表示为TRUE。

要将值设置为TRUE,只需使用任何值定义变量即可。我喜欢使用值1

set var=1

要将值设置为FALSE,请取消定义变量:

"set var="

每当我需要测试该值时,我只需使用

if defined var (rem true conditional statements) else (rem false conditional statements)

现在,要允许将升级设置为逻辑TRUE的可选参数 - 将值初始化为false,然后检查参数列表以查看是否存在选项,如果存在,则将值设置为TRUE。我建议像/U这样的选项来表示升级。您没有说您的脚本是否已有参数。我假设您有2个必需参数。

您应该决定您的选项是在所需参数之前还是之后。最简单的是。因此,如果您有2个必需参数,那么该选项(如果存在)将位于%3

@echo off
setlocal
:: Initialize default value to FALSE
set "upgrade="
:: Look for option
if /i %3 equ /U set upgrade=1

您可以将选项放在前面,但如果值以/开头,则必须引用所需的参数值。处理完选项后,请使用SHIFT /1确保所需参数以%1

开头
@echo off
setlocal
:: Initialize default value to FALSE
set "upgrade="
:: Look for option
if /i %1 equ /U (
  set upgrade=1
  shift /1
)
:: Required parameters now start with %1, regardless whether the option was present.

您可以通过添加:parseOptions标签,然后添加多个IF语句(每个选项一个)来扩展上述方法以支持多个选项。每次发现选项时,只需移动参数,然后GOTO :parseOptions查找下一个选项。如果选项在最后,则使用SHIFT /3。如果选项位于开头,则为SHIFT /1。但是如果有很多选择,编码会变得单调乏味并且容易出错。

查看Windows Bat file optional argument parsing以获得定义许多可选参数的方便而有效的方法。它提供了一种为每个选项指定默认值的机制。单个选项可能有点过分,但如果你有很多选择,它会非常有用。

有关包含许多选项的脚本示例,请参阅getTimestamp.bat for time and date processing

答案 3 :(得分:1)

将命令行参数放在双引号中:

script.bat parameterA "upload=true"

等号 = 是'默认分隔符'之一,如 space Tab ;