【问题标题】:Batchfile: What's the best way to declare and use a boolean variable?批处理文件:声明和使用布尔变量的最佳方法是什么?
【发布时间】:2016-06-03 08:40:50
【问题描述】:

在批处理文件中声明和使用布尔变量的最佳方法是什么?这就是我现在正在做的事情:

set "condition=true"

:: Some code that may change the condition

if %condition% == true (
    :: Some work
)

有没有更好、更“正式”的方式来做到这一点? (例如,在 Bash 中,您可以执行 if $condition,因为 truefalse 是它们自己的命令。)

【问题讨论】:

  • 差不多就是这样。批处理中的变量要么是字符串,要么是 32 位整数,仅此而已。
  • 您可以使用if defined var,这样可以在iffor 和其他括号代码块中工作而无需延迟扩展。还有基于零或非零错误级别的条件执行。
  • 不应该是 "%condition%"=="true" 吗?
  • @svasa - 如果%condition% 可以保证有值,则不需要它们;如果为空,引号只是为了避免语法错误。
  • @SomethingDark:所有变量都是字符串;批处理文件中没有数字变量。 set /A 命令执行的算术运算只是管理 32 位整数,但这并不完全相同...

标签: windows batch-file cmd windows-10 command-prompt


【解决方案1】:
set "condition="

set "condition=y"

其中y 可以是任何字符串或数字。

这允许if definedif not defined 都可以在块语句(括号中的语句序列)中使用,以询问标志的运行时状态,而不需要enabledelayedexpansion


即。

set "condition="
if defined condition (echo true) else (echo false)

set "condition=y"
if defined condition (echo true) else (echo false)

第一个会回显false,第二个会回显true

【讨论】:

  • @AlexanderSchäl:更多解释。 %condition% 指的是变量condition内容,因此如果condition 的值为y,则if defined %condition% 被输入为if defined y
【解决方案2】:

我暂时坚持我原来的答案:

set "condition=true"

:: Some code...

if "%condition%" == "true" (
    %= Do something... =%
)

如果有人知道更好的方法,请回答这个问题,我很乐意接受你的回答。

【讨论】:

  • Magoo 的答案更好,因为它也适用于代码块内
【解决方案3】:

我想另一种选择是使用“1==1”作为真值。

如此重复例子:

set condition=1==1

:: some code

if %condition% (
    %= Do something... =%
)

当然可以设置一些变量来保存truefalse 值:

set true=1==1
set false=1==0

set condition=%true%

:: some code

if %condition% (
    %= Do something... =%
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2015-02-28
    • 2015-01-23
    • 2011-12-01
    • 2018-07-08
    相关资源
    最近更新 更多