每当我想要批处理脚本中的布尔值时,我都会使用不存在变量来表示 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 语句,每个选项一个。每次发现一个选项时,只需 SHIFT 参数和GOTO :parseOptions 即可查找下一个选项。如果选项位于末尾,则使用SHIFT /3。如果选项在开头,则为SHIFT /1。但是如果有很多选项,编码就会变得乏味且容易出错。
查看Windows Bat file optional argument parsing,了解一种方便而强大的方式来定义许多可选参数。它提供了一种机制来为每个选项指定默认值。单个选项可能有点矫枉过正,但如果您有很多选项,它会非常有用。
有关具有多个选项的脚本示例,请参阅getTimestamp.bat for time and date processing