将“+”符号与用户使用批处理文件中的if语句输入的变量进行比较

问题描述 投票:0回答:2

我有批处理文件的一些问题。该文件应接受来自用户的2个数字的输入,然后接受符号的输入。之后比较用户使用“+”符号输入符号,但它不起作用。

也许你可以从我的代码中更好地理解:

echo please enter first number
set /p number0=

echo please enter second number
set /p number1=

echo enter one of the numbers - ^+ - / ^*
set /p symbol="set the variable: "

echo %symbol%
set plus=+
echo %plus%
pause

if /i "%symbol%" EQU "+"(
    echo your choice is to sum up the numbers
    pause
    set /a answ = %number0% + %number1%
    echo answer:
    echo %answ%
)

我已经尝试过使用if /i %symbol% == plus,尝试使用我能想象的任何组合的引号。我试图像这个set /p plus="+"那样分配运算符加变量,然后在符号变量周围使用“”,依此类推。

但仍然没有任何作用,在我到达部分变量应该与符号+比较我的批处理文件只是崩溃。所有变量都正确分配。

如果有必要,这是查看完整文件的链接,但请注意,完整文件不是用英语写的:https://1drv.ms/u/s!Ap4-t2P-Igzihb5shQZLNkKySEWOrQ

batch-file variables if-statement symbols
2个回答
1
投票

没有if声明,我找到了一种做同样事情的方法。事实证明我可以这样做:

set /p number1=
set /p number2=
set /p symbol=
set /a answ=%number1%%symbol%%number2%

1
投票

我建议这段代码:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set Number1=
set /P "Number1=First number:   "
set Number2=
set /P "Number2=Second number:  "

:EnterOperator
set Operator=
set /P "Operator=Math. operator: "
if not defined Operator goto EnterOperator
if "!Operator!" == "+" goto EvaluateExpression
if "!Operator!" == "-" goto EvaluateExpression
if "!Operator!" == "*" goto EvaluateExpression
if "!Operator!" == "/" goto EvaluateExpression
goto EnterOperator

:EvaluateExpression
set /A Result=Number1 %Operator% Number2
echo The result is:  %Result%
endlocal

在运行命令提示符窗口set /?时,请仔细阅读关于算术表达式的帮助输出。在算术表达式中仅使用环境变量名称Number1Number2时,用户输入的字符串也可以是整数或不是整数,在这种情况下,Windows命令解释程序替换不存在的环境变量或无效字符串通过值0评估算术表达式。

在评估算术表达式之前,必须使用延迟环境变量扩展来评估算术符号运算符,否则Windows命令解释器可能会因为操作符无效而输出错误消息,或者完全不同的操作取决于用户在提示操作员时输入的内容。

请注意,此代码仍可以除零。

在执行此命令行之前,在使用算术表达式和扩展之前比较运算符字符串时,请使用延迟环境变量表达式查看Use IF statement on variables with unacceptable symbols (e.g. / or :)上的答案。另请参阅Why is no string output with 'echo %var%' after using 'set var = text' on command line?以及有关SET语法的一般信息。

要了解使用的命令及其工作方式,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?
© www.soinside.com 2019 - 2024. All rights reserved.