批处理if语句不起作用

时间:2013-01-08 03:52:11

标签: batch-file

以下代码无效。无论我输入什么,只会返回错误,然后返回Retry

@echo off

:maths
set /p Mathsa="first number? "
echo your first number is %Mathsa%

:retry

set /p Mathso="operator?(+-*/) "
if "%Mathso%" ==* GOTO run
if "%Mathso%" ==/ GOTO run
if "%Mathso%" ==+ GOTO run
if "%Mathso%" ==- GOTO run
echo Error, wrong operator. & goto retry

:run
set /p Mathsb="Second Number? "
set /a Mathsans=%Mathsa%%Mathsp%%Mathsb%
echo %Mathsans%
pause

我完全不知道为什么会这样做。这是一个学校项目,你可以给予任何帮助!

1 个答案:

答案 0 :(得分:5)

这是Mathso变量周围的引号。将它们全部更改为使用相等的两个方面的引号,例如:

if "%Mathso%" == "+" GOTO run

他们应该做得更好。

原因是cmd与UNIXy shell不完全相同。引号保留在相等的左边,这样你最终得到的是:

if "+" == + then ...

"+" 等于+

通过在两边加上引号,它变为:

if "+" == "+" then ...

是真的。


而且,正如Aacini在评论中指出的那样,您的计算set对运算符使用了错误的变量。你应该改变:

set /a Mathsans=%Mathsa%%Mathsp%%Mathsb%

成:

set /a Mathsans=%Mathsa%%Mathso%%Mathsb%
                              ^
                              |
                              see here