根据数字范围显示单个输出(如果,转到)

时间:2018-05-31 01:04:58

标签: batch-file

有人可以向我解释为什么这不会只显示if命令中给出的范围之间的数字的结果?无论我尝试过什么,它都会不断显示所有结果,尽管给出了范围。我已经查看了this answer,但它不起作用。例如,如果我写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.

2 个答案:

答案 0 :(得分:2)

这就是我这样做的方式:

public enum _Data
{
    P,
    B,
    T,
}

public enum _BeadColors
{
    BLUE,
    RED,
    NONE,
}

public _Data previousColor = _BeadColors.NONE;

class CustomClass{

}

//extension method for contains
public static bool Contains(this string input, _Data data){
string[] str = { "P", "B", "T" };

if(data == BaccaratScoreboard._Data.P){
    return input.Contains (str [0]);
}

if(data == BaccaratScoreboard._Data.B){
    return input.Contains (str [1]);
}

if(data == BaccaratScoreboard._Data.T){
    return input.Contains (str [2]);
}

答案 1 :(得分:0)

根据IPv4 CIDR Blocks您的max supported值是错误的:

  

在通常的用法中,子网中的第一个地址,主机标识符中的所有二进制零,保留用于引用网络本身,而最后一个地址,主机标识符中的所有二进制地址,用作广播地址对于网络;这样可以减少主机可用的地址数量。

Batch能够执行位掩码和移位操作来计算所需的值,从而无需使用不同的表。

:: Q:\Test\2018\05\31\SO_50615266.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion

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

for /l %%L in (2,1,8) do (
    set /a "Max=(1<<%%L)-2, Mask=32-%%L, OC4=254-Max"
    If !Max! geq %ans% (
        echo(## Calculated on %computername% by %username% at %date% %time:~0,8%
        echo # Host Req     #   Mask   #       Netmask      #   Max Supported #
        echo   %ans%            /!Mask!            255.255.255.!OC4!      !Max!
        echo(
        Goto :Eof
    )
)
Echo %ans% exceeds a class D net

样品输出:

> Q:\Test\2018\05\31\SO_50615266.cmd 1 1
## Calculated on HP-G1610 by LotPings at 2018-05-31 18:37:06,77
# Host Req     #   Mask   #       Netmask      #   Max Supported #
  2            /30            255.255.255.252      2


> Q:\Test\2018\05\31\SO_50615266.cmd 14
## Calculated on HP-G1610 by LotPings at 2018-05-31 18:37:38
# Host Req     #   Mask   #       Netmask      #   Max Supported #
  14            /28            255.255.255.240      14