9

我有一个带有以下硬编码参数的批处理文件

SET升级=假

我想给用户一个选项来明确定义上传参数。默认情况下它应该是假的,如果用户明确定义upgrade=true我应该把它当作真。

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

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

if "%2"=="" goto false

:false
SET upgrade=false
4

4 回答 4

9

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

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

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

所以,主批处理(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
于 2013-10-22T07:58:51.090 回答
7

简单,试试这个。要将升级设置为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)

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

于 2013-10-22T07:13:49.377 回答
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 语句,每个选项一个。每次发现一个选项时,只需 SHIFT 参数并GOTO :parseOptions查找下一个选项。如果选项位于末尾,则使用SHIFT /3. 如果选项在开头,则SHIFT /1. 但是,如果有很多选项,编码就会变得乏味且容易出错。

查看Windows Bat 文件可选参数解析,以方便且强大的方式定义许多可选参数。它提供了一种机制来为每个选项指定默认值。单个选项可能有点矫枉过正,但如果您有很多选项,它会非常有帮助。

有关具有许多选项的脚本示例,请参阅getTimestamp.bat 了解时间和日期处理

于 2013-10-22T12:09:35.953 回答
1

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

script.bat parameterA "upload=true"

等号=是“默认分隔符”之一,例如spaceTab和。,;

于 2013-10-22T07:36:07.300 回答