我有一个批处理文件,其中硬编码了以下参数:
SET upgrade=false
我想给用户一个选项来明确定义上传参数。默认情况下应该是false,如果用户明确定义upgrade=true
,我应该将其视为true。
我还想检查上传参数中布尔值的验证。
我对批处理文件处理不熟悉。我已经尝试使用默认值处理。
if "%2"=="" goto false
:false
SET upgrade=false
我有一个批处理文件,其中硬编码了以下参数:
SET upgrade=false
我想给用户一个选项来明确定义上传参数。默认情况下应该是false,如果用户明确定义upgrade=true
,我应该将其视为true。
我还想检查上传参数中布尔值的验证。
我对批处理文件处理不熟悉。我已经尝试使用默认值处理。
if "%2"=="" goto false
:false
SET upgrade=false
简单易懂,试试这个方法。要将升级设置为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)
然后,您可以添加其他代码。
检查变量是否存在。如果不存在,则假定为false。任何与“true”不同的值都被认为是false
if not defined upgrade set upgrade=false
if not "%upgrade%"=="true" set upgrade=false
当需要升级变量为true时,在调用批处理文件之前定义它,可以通过命令行或使用第二个批处理文件调用第一个并设置值。
因此,主批处理文件(例如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来完成相同的操作(例如:doWorkWithUpload.cmd)
@echo off
set upgrade=true
call doWork.cmd
1
:set var=1
要将值设置为FALSE,请取消定义变量:
"set var="
标签。if defined var (rem true conditional statements) else (rem false conditional statements)
/U
这样的选项表示升级。您没有说明您的脚本是否已经有参数。我假设您有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语句来扩展上述方法以支持多个选项。每次发现一个选项时,只需SHIFT参数并GOTO :parseOptions
查找下一个选项。如果选项在结尾,则使用SHIFT /3
。如果选项在开头,则使用SHIFT /1
。但是,如果有很多选项,编码变得繁琐且容易出错。
请参阅Windows Bat文件可选参数解析,以方便而强大的方式定义许多可选参数。它提供了一种机制来指定每个选项的默认值。如果只有一个选项可能有点过度,但如果有很多选项,则非常有帮助。
有关具有许多选项的脚本示例,请参见getTimestamp.bat进行时间和日期处理
只需将命令行参数放在双引号中即可:
script.bat parameterA "upload=true"
if /i <A> EQU <B>
来检查不区分大小写的相等性! - Jean-Francois T.