批量检查IP是否在特定范围内

批量检查IP是否在特定范围内

我正在尝试编写一个批处理脚本来获取活动 NIC(可能是无线或本地)的本地 IP 地址。为了获取 IP 地址,我使用了以下行:

FOR /F "delims=[] tokens=2" %%a in ('ping -4 %computername% -n 1 ^| findstr "["') do (set thisip=%%a)

然后我得到了 IP 地址。范围取决于第二组(例如 172.64.10.10 中的 64)。如果本地 IP 地址在第二组中处于 64 - 127 范围内,我想启动一个脚本。

我怎样才能做到这一点?


我已经尝试导出第二组中的值,但是我必须导出两个或三个字符:

SET IP=%thisip:~3,2%

然后我设法循环遍历这些数字,但是我错了,我不想多次运行脚本,并且我的循环会根据 IP 地址运行多次:

:MyLoop
IF "%IP%" LSS "64" GOTO EndLoop
IF "%IP%" GTR "99" GOTO EndLoop
ECHO %IP%
SET /A IP+=1
GOTO MyLoop
:EndLoop

答案1

这是您需要的代码,全部包含在一个批处理文件中。

@echo off

setlocal EnableDelayedExpansion

set "thisIP="
set /a SecondGroup=0
set /a RangeStart=64
set /a RangeEnd=127

for /f "delims=[] tokens=2" %%A in ('ping -4 %computername% -n 1 ^| findstr "["') do (set thisIP=%%A)

for /f "delims=. tokens=1,2,3,4" %%A in ("!thisIP!") do set /a SecondGroup=%%B

if !SecondGroup! GEQ !RangeStart! (
  if !SecondGroup! LEQ !RangeEnd! (
    echo Let's execute you code here.
  ) else (
    echo IP is too high.
  )
) else (
  echo IP is too low.
)

setlocal DisableDelayedExpansion
endlocal

ECHO如果不需要命令,请记得删除它们。我插入它们只是为了澄清目的。

相关内容