在if语句中设置/ a无法工作

时间:2016-02-22 02:19:54

标签: batch-file

下面是我试图做的简单计算器批次,但是在设置/无法完成工作。什么问题和我的错误?

@echo off
Title Calculator
:start
echo Press 1 for "+"
echo Press 2 for Exit
echo.
set /p input="Please choose your option: "
if %input%==1 (
echo.
set /p num1="Please enter first number: "
set /p num2="Please enter second number: "
set /a ans=%num1%+%num2%
echo Your answer is %ans%
pause
cls
goto start
)
if %input%==2 (
echo.
echo Thanks!
pause
exit
) else echo Invalid input!
pause
goto start

当我第一次运行批处理时,将返回Missing操作数。当我再次继续时,错误消失而没有给我答案,当我第三次继续时,它返回我想要加上的数字的答案。

例如: 1. 10 + 10结果是缺少操作数 2. 1 + 1结果为空 3. 2 + 2结果是20(这是我第一次输入的2个数字)

请帮助我的错误。感谢。

1 个答案:

答案 0 :(得分:1)

以下是rojo明智建议使用延迟扩展和缩进的批处理代码:

@echo off
title Calculator
setlocal EnableExtensions EnableDelayedExpansion
:Begin
echo Press 1 for "+"
echo Press 2 for Exit
echo/
set "input="
set /P "input=Please choose your option: "
if "!input!"=="1" (
    echo/
    set /P "num1=Please enter first number: "
    set /P "num2=Please enter second number: "
    set /A ans=num1+num2
    echo Your answer is !ans!
    pause
    cls
    goto Begin
)
if "!input!"=="2" (
    echo/
    echo Thanks^^!
    echo/
    pause
    exit /B
)
echo Invalid input^^!
echo/
pause
echo/
goto Begin

在询问用户之前始终清除变量input,否则用户只需按 RETURN ENTER 键即可保持变量{{1}的当前值}}

延迟扩展用于检查针对input1的用户输入,以防用户输入字符,这会导致执行时出现语法错误但未使用延迟扩展。不过,对于第一个用户提示,最好使用命令2

对于使用choice在运行时计算的表达式,可以直接指定环境变量而不进行扩展。所以不要使用

set /A

set /A ans=%num1%+%num2%

就足够了
set /A ans=!num1!+!num2!

因为使用参数set /A ans=num1+num2 命令/A会自动将setnum1解释为变量名称。

然后需要延迟扩展来打印存储在变量num2中的结果值,因为命令处理器在解析以{{1}开头的整个块时分别向前扩展ans并以%ans%结尾。从命令提示符窗口中运行批处理文件时可以看到这一点,第一行更改为(以进行调试。

有关详细信息,请在命令提示符窗口)@echo on中运行,并阅读输出帮助页面。

start 是命令的名称。因此,尽管可能,但使用这个词作为标签的名称并不好。

顺便说一下:始终使用set /?而不是help set因为这会产生很大的不同,请参阅

上的答案