![批处理。如何在 if-and 语句中使用 GEQ 和 LEQ?](https://linux22.com/image/1584213/%E6%89%B9%E5%A4%84%E7%90%86%E3%80%82%E5%A6%82%E4%BD%95%E5%9C%A8%20if-and%20%E8%AF%AD%E5%8F%A5%E4%B8%AD%E4%BD%BF%E7%94%A8%20GEQ%20%E5%92%8C%20LEQ%EF%BC%9F.png)
所以我尝试编写一个简单的程序,这样我就可以模拟 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 之间。