Пакетная проверка файлов по нескольким критериям для ipconfig | найти / я заявление - PullRequest
0 голосов
/ 27 июня 2018

У меня есть следующий пакетный файл для проверки диапазона IP-адресов, на котором находится компьютер, чтобы решить, нужно ли запускать ABC.exe.

Это работает нормально, и поскольку первая часть всех 3 офисных местоположений имеет одинаковые номера в начале их диапазонов IP-адресов вплоть до первого номера третьего октета (10.41.1), я сейчас просто проверяю это.

@ECHO OFF
SET OFFICE_ALL=10.41.1
REM SET OFFICE_1=10.41.168.
REM SET OFFICE_2=10.41.162.
REM SET OFFICE_3=10.41.172.

REM SET VPN_CONNECTION=10.36.

ipconfig | find /i " %OFFICE_ALL%" >nul 2>nul && ( 
  start C:\ABC-tool\ABC.exe 
) || (
  exit
) 

Все это говорит о том, что мы собираемся переехать в другое место, и коллеги по сети сказали мне, что диапазон IP-адресов для нового офиса станет 10.44.121.x.

Я пытался настроить свой скрипт так:

@ECHO OFF
SET OFFICE_MOST=10.41.1
REM SET OFFICE_1=10.41.168.
REM SET OFFICE_3=10.41.172.

SET OFFICE_2=10.44.121.

REM SET VPN_CONNECTION=10.36.

ipconfig | find /i " %OFFICE_MOST%" >nul 2>nul && ( 
  start C:\ABC-tool\ABC.exe 
) || ipconfig | find /i " %OFFICE_2%" >nul 2>nul && ( 
  start C:\ABC-tool\ABC.exe 
) || (
  exit
) 

Но почему-то это не работает ... Мое понимание || заключается в том, что код после того, как он выполняется, только когда код до этого не был успешным, поэтому он в основном действует как конструкция if-else. Но, видимо, это еще не все, и я не могу понять это. Где и почему я ошибаюсь в своем скорректированном коде?

1 Ответ

0 голосов
/ 27 июня 2018

Я предлагаю вам лучше разобрать вывод ipconfig, чтобы сохранить IPv4 в переменной
и октеты, разделенные точкой, разделяются на свои собственные переменные.

:: Q:\Test\2018\06\27\SO_51066473.cmd
@Echo off&SetLocal EnableDelayedExpansion

For /f "tokens=2delims=:" %%I in (
    'ipconfig ^| findstr "[^n].IPv4.Add.*:"'
) Do (
    Set "IPv4=%%I"
    For /f "tokens=1-4delims=. " %%A in ("%%I"
    ) do set /A "OC1=%%A,OC2=%%B,OC3=%%C,OC4=%%D"
)
Set "IPv4=%IPv4:~1%"
Echo Your IPv4 Address is : [%IPv4%]
Echo the Octets are:
For /l %%L in (1,1,4) Do Echo=OC%%L=!OC%%L!

Таким образом, вы можете сравнивать все или часть чисел.

Пример вывода:

> SO_51066473.cmd
Your IPv4 Address is : [192.168.45.183]
the Octets are:
OC1=192
OC2=168
OC3=45
OC4=183
...