首页 > 解决方案 > 根据数字范围显示单个输出(if, goto)

问题描述

有人可以向我解释为什么这不会只显示if命令中给出的范围之间的数字的结果吗?无论我尝试了什么,它都会不断显示所有结果,尽管给出了范围。我已经看过这个答案,但它不起作用。例如,如果我写if %ans% LEQ 8 GOTO :2,它将显示所有小于 8 的数字的所有结果,而不仅仅是 5 到 8 之间(这是我试图显示的)。

set num1=%1
set num2=%2
set /a ans=num1+num2

if %ans% LEQ 4 GOTO :1

if %ans% GTR 4 if %ans% LEQ 8 GOTO :2

if %ans% GTR 8 if %ans% LEQ 16 GOTO :3

if %ans% GRT 16 if %ans% LEQ 32 GOTO :4

:1
echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
echo   %ans%            /30            255.255.255.252      4
echo.

:2
echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
echo   %ans%            /29            255.255.255.248      8
echo.

:3
echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
echo   %ans%            /28            255.255.255.240      16
echo.

:4
echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
echo   %ans%            /27            255.255.255.224      32
echo.

标签: batch-file

解决方案


这是我会这样做的方式:

@echo off

set /a ans=%1+%2

for %%n in (4 8 16 32) do if %ans% LEQ %%n GOTO :%%n

echo %ans% is greater than 32
goto :EOF

:4
echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
echo   %ans%            /30            255.255.255.252      4
echo.
goto :EOF

:8
echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
echo   %ans%            /29            255.255.255.248      8
echo.
goto :EOF

:16
echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
echo   %ans%            /28            255.255.255.240      16
echo.
goto :EOF

:32
echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
echo   %ans%            /27            255.255.255.224      32
echo.
goto :EOF

推荐阅读