2

Я пытаюсь сделать пакетный скрипт, чтобы получить локальный IP-адрес активной сетевой карты (может быть беспроводной или локальный). Для получения IP-адреса я использовал следующую строку:

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

У меня тогда есть IP-адрес. Диапазон зависит от второй группы (например, 64 в 172.64.10.10). Я хотел бы запустить скрипт, если локальный 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 ответ1

0

Вот код, который вам нужен, все в одном пакетном файле.

@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 если они вам не нужны. Я вставил их только для уточнения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .