0

我刚刚开始在 Windows 上处理我的第一个批处理文件,但我无法通过这部分:

SET /p exp= "Enter Arthimetic Expression:"
SET /p ans1= "Enter Expression's Product:"
REM calculating the arthimetic expression:
SET /a ans2= %exp%
IF %ans1% == %ans2% (
ECHO Your answer is right!
) ELSE(
ECHO Your answer is wrong!
ECHO %exp% = %ans2%
)

这个脚本不起作用*,我真的不知道问题出在哪里..(但我估计它涉及 IF 和 ELSE)

*它只是崩溃

4

2 回答 2

1

我能找到的唯一错误是 ELSE 和 (

于 2013-03-23T07:53:32.703 回答
0

实际上有两个错误。好吧 - 三,也许。

当然在 theELSE和 the之间缺少空格(

然后是奇怪的拼写arithmetic- 这很关键。DOS 无法处理糟糕的拼写。

好吧,实际上我只是在固定空间后尝试了批处理。它崩溃了。它真的做到了!一次,it crashed是准确的。好吧 - CMD实际上并没有崩溃,它只是返回到提示符。没有错误信息 - 没有。刚刚再次弹出提示。

所以我set /p通过删除=. 这似乎解决了问题,因为下次提示愉快地出现,然后一切顺利。

所以我决定解决jeb问题。当然 - 输入一个类似的表达式(3*3)+42,然后输入一个不正确的结果,你会得到一个丑陋的反对意见。

最后一个行为的原因是语句被解析(解码和验证)任何 %var% 都被它在解析时的值替换。然后执行语句

因此,如果我输入(3*3)+42and 56,原始表达式将被解析为

IF 56 == 51 (ECHO Your...right!) ELSE (ECHO Your...wrong!&ECHO (3*3)+42 = 51)

[在批处理中,您可以通过用 分隔命令来级联命令&]

现在验证失败,因为在解析器看来,ELSE表达式以右括号结尾3*3

@ECHO OFF
setlocal
SET /p exp="Enter Arithmetic Expression:"
SET /p ans1="Enter Expression's Product:"
REM calculating the arithmetic expression:
SET /a ans2= %exp%
::
:: Way the first
::
FOR /f "delims=" %%i IN ("%exp%") DO (
IF %ans1% == %ans2% (
ECHO Your answer is right!
) ELSE (
ECHO Your answer is wrong!
ECHO %%i = %ans2%
)
)
::
:: Way the second
::
FOR /f "tokens=1*delims==" %%i IN ('set exp') DO (
IF %ans1% == %ans2% (
ECHO Your answer is right!
) ELSE (
ECHO Your answer is wrong!
ECHO %%j = %ans2%
)
)
::
:: Way the third
::
SET refexp=%exp:)=^^)%
IF %ans1% == %ans2% (
ECHO Your answer is right!
) ELSE (
ECHO Your answer is wrong!
ECHO %refexp% = %ans2%
)

ECHO Note: 'SET exp' returns
SET exp

第一个和第二个解决方案使用FOR /F命令的分析能力(从提示中看到FOR /?。)这里的关键是如果表达式可以被哄到metavariable(循环控制变量)中,那么它直到运行时才能被评估,到那时解析器已经验证了表达式。

第三种解决方案是在"escape"任何右括号前加上插入符号 ( ^) - 请参阅SET /?文档。当一个字符被转义时,它在批处理语言中的特殊含义被忽略,它变得就像任何其他字符一样。在这种情况下,由于插入符号本身就是具有特殊含义的特殊字符,因此它本身需要通过插入符号进行转义...

但奇怪的是,当我用=重新插入后的空格重新运行程序时,它运行得很愉快。奇怪的...

于 2013-03-23T09:25:32.427 回答