特定类型 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
我正在制作一个基于文本的角色扮演游戏,我正在为一种特定类型的 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