我有一个批处理文件,其中包含以下参数的硬编码
SET upgrade = false
我想给用户一个明确定义upload参数的选项。默认情况下,它应该是false,如果用户明确定义upgrade=true
,我应该将其视为true。
我还想检查upload参数中布尔值的验证。
我是批处理文件处理的新手。我尝试过使用默认值处理。
if "%2"=="" goto false
:false
SET upgrade=false
答案 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 ,,和; 。