特定类型 if 语句的正确语法

Proper syntax of a specific type of if statement

我正在制作一个基于文本的角色扮演游戏,我正在为一种特定类型的 if 语句而苦苦挣扎,我不想分享确切的代码,因为它包含了我过去制作的很多内容我希望获得版权的 5 年。 (澄清一下,我指的是我自己创作的艺术作品、音乐和故事情节)

代码示例:

set choice=00
:top
cls
echo What would you like to do? 
echo 1) gain 10 points
echo 2) do something else
set /p choice=Your Choice:
if %choice%==1 goto :options
if %choice%==2 goto :something-else
if %choice%==00 goto :end

:options
set /a opt1=10
set /a opt2=10
if %opt1%==%opt2%-5 goto :nxt
set /a opt1+=10
goto :top

:nxt
cls
echo You can't do that! 
echo/
echo Press Enter to Continue
pause >nul
goto :top

:something-else
exit

:end
exit

问题是,我的进程完全忽略了这个 if 语句。从我的角度来看,opt2-5 应该 = 5 因此禁止正在尝试的操作,即向 opt1 添加 10,而是跳过 if 并无论如何添加 10。到目前为止,这种方程式在其他领域对我有用,我不明白为什么它现在不起作用了。唯一的区别是其他代码完全定义了变量,例如:opt1=10 opt2=5,如果 opt2=5 那么回显你不能那样做。

要批量执行表达式比较,您可以将 Set /A 与设计为如果为假则计算为 0 的表达式结合使用 &&|| 条件运算符来实现 if else 逻辑。

IE:

@Echo off
:l
Set /A A=5,B=2
Set /P "C=Value for C: "

2> nul Set /A "D=B+C","1/(A-D)" && (
 Cmd /V:On /C "Echo(!A! ^!= !D!"
) || (
 Cmd /V:On /C "Echo(!A! == !D!"
)
Goto:l