我有批处理文件的一些问题。该文件应接受来自用户的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。
没有if
声明,我找到了一种做同样事情的方法。事实证明我可以这样做:
set /p number1=
set /p number2=
set /p symbol=
set /a answ=%number1%%symbol%%number2%
我建议这段代码:
@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 /?
时,请仔细阅读关于算术表达式的帮助输出。在算术表达式中仅使用环境变量名称Number1
和Number2
时,用户输入的字符串也可以是整数或不是整数,在这种情况下,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 /?