批处理。如何在 if-and 语句中使用 GEQ 和 LEQ?

批处理。如何在 if-and 语句中使用 GEQ 和 LEQ?

所以我尝试编写一个简单的程序,这样我就可以模拟 D20 掷骰子并发送消息(Getroffen),如果掷出的数字介于 10 和 15 之间。但是当数字大于 15 时,它只会给我一个“Daneben”。当数字小于 10 时,我也想得到一个“Daneben”,但事实并非如此。我应该怎么做?

 @echo off

:run
cls
echo Zahl zwischen 1 und 20
call :roll20
set zahl=%roll%
echo      %zahl%
if %zahl% GEQ 10 if %zahl% LEQ 15 (echo Getroffen) ELSE (echo Daneben)
pause >NUL
goto run

:roll20
set roll=%random%
if %roll% GTR 20 goto roll20
if %roll% LSS 1 goto roll20

答案1

您仅测试zahl超过 9,否则将不会获得输出。

if %zahl% GEQ 10 if %zahl% LEQ 15 (echo Getroffen) ELSE (echo Daneben)

最简单的解决方案是使用多个测试:

:: values under 10
if %zahl% LSS 10 echo Daneben

:: values 10 and over but under 15
if %zahl% GEQ 10 if %zahl% LEQ 15 echo Getroffen

:: values over 15
if %zahl% GTR 15 echo Daneben

您还应该更改您的随机器以使用这个:

SET /a roll=(%RANDOM%*20/32768)+1

这会对结果执行一些数学运算,%RANDOM%以确保输出值始终在 1 到 20 之间。

相关内容