3

我正在编写一个批处理文件,该文件需要检查三个变量是否同时都等于同一事物。

我认为会起作用的是:

if %A% AND %B% AND %C% EQU 1 goto YES

遗憾的是它没有用。在我的文件中使用这个:

:init
set A=0
set B=0
set C=0

然后,如果你告诉它,如果通过并将变量 AB 和 C 设置为 1。

if %A% and %B% and %C% EQU 1 (
    goto YES
) ELSE (
    goto NO
)

然后该文件继续并执行此问题不需要的其他事情。

请尽快回答。谢谢你。

4

4 回答 4

2

简单地链接 IF:

IF %A% EQU 1 IF %B% EQU 1 IF %C% EQU 1 goto YES

你可以用一个直线来跟进这个GOTO NO,它将作为“else”分支(或者你可以像在你的原始代码中那样做IF/ ELSE,这是一个偏好问题)。

请注意,将以上内容写为

IF "%A%"=="1" IF "%B%"=="1" IF "%C%"=="1" GOTO YES
GOTO NO

即使没有启用命令扩展也可以工作。

于 2013-05-10T20:29:03.063 回答
1

尝试这个

@echo off &setlocal
:init
set A=0
set B=0
set C=0

if %A% equ %B% if %B% equ %C% (goto:yes) else goto:no
于 2013-05-10T20:30:52.637 回答
1

这里有两个选项:

1- 如果变量的可能值只有 0 和 1,则布尔 AND 运算符的等效数字运算是乘法:

set /A result=A * B * C
if %result% EQU 1 (
   goto YES
) else (
   goto NO
)

2-您可能会更清楚地说明您嵌套两个或多个IF's 的目的是通过这种方式组装布尔 AND 运算符:

set AND=IF
if  %A% equ 1  %AND%  %B% equ 1  %AND%  %C% equ 1  goto YES
goto NO
于 2013-05-11T00:48:36.867 回答
0

可悲的是,接受的答案并没有完全回答所提出的问题。正如所应用的测试所示,如果 A=B=C,它所做的一切都是 YES,如果 A=B=C=anyvalue(如 0,如图所示),它将这样做。问题是如果 A=B=C=1,这将需要额外的测试。

根据可以分配给 A、B 和 C 的确切值,可以很容易地测试 A=B=C=1(如指定):

if %A%%B%%C%==111 goto yes

但这假设不可能,例如 A=1,B 未定义和 C=11。

于 2013-05-11T02:54:26.577 回答