Batchfile:声明和使用布尔变量的最佳方法是什么?

Jam*_* Ko 14 windows cmd batch-file command-prompt windows-10

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

set "condition=true"

:: Some code that may change the condition

if %condition% == true (
    :: Some work
)
Run Code Online (Sandbox Code Playgroud)

有没有更好,更"正式"的方式来做到这一点?(例如,在Bash中你可以自己做if $condition,true并且false是他们自己的命令.)

Mag*_*goo 18

set "condition="
Run Code Online (Sandbox Code Playgroud)

set "condition=y"
Run Code Online (Sandbox Code Playgroud)

哪里y可以是任何字符串或数字.

这允许if defined并且if not defined可以在块语句(带括号的语句序列)中使用它们来查询标志的运行时状态而无需enabledelayedexpansion


即.

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

set "condition=y"
if defined condition (echo true) else (echo false)
Run Code Online (Sandbox Code Playgroud)

第一个是回声false,第二个是回声true

  • @AlexanderSchäl:更多解释。`%condition%` 指的是变量 `condition` 的 *contents*,所以 `if defined %condition%` 被解释为 `if defined y` 如果 `condition` 的值为 `y` (4认同)

Jam*_* Ko 8

我暂时坚持原来的答案:

set "condition=true"

:: Some code...

if "%condition%" == "true" (
    %= Do something... =%
)
Run Code Online (Sandbox Code Playgroud)

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

  • Magoo 的答案更好,因为它也适用于代码块 (4认同)

tim*_*den 7

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

因此重复这个例子:

set condition=1==1

:: some code

if %condition% (
    %= Do something... =%
)
Run Code Online (Sandbox Code Playgroud)

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

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

set condition=%true%

:: some code

if %condition% (
    %= Do something... =%
)
Run Code Online (Sandbox Code Playgroud)