Пакетный скрипт не может передать содержимое переменной другим переменным - PullRequest
0 голосов
/ 11 января 2019

Я делаю сценарий для развлечения, который идентифицирует все компьютеры в сети. Часть, с которой я сталкиваюсь, - это получение соответствующих IP-адресов локальных компьютеров из таблицы ARP. Есть функция, которая должна позволять мне обрезать результаты и сравнивать их с подсетью, чтобы увидеть, является ли адрес релевантным, но когда я пытаюсь обработать переменные, он ничего не назначает ни одной из переменных и действует так, как будто все переменные пустой.

Ниже приведена усеченная версия скрипта:

SET SUB="192.168.10"
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`arp -a`) DO (
    SET Foo=%%F
    SET Faa=%Foo%
    SET Foo=%Foo:~0,15%
    SET Faa=%Faa:~0,11%
    IF /I "!Faa!"=="%SUB%" ECHO %Foo% >> comp_list.txt
    SET /a count=!count!+1
) 

Вывод последней строки цикла в cmd выглядит следующим образом:

C:\_Scripts\>(
SET Foo=255.255.255.255       ff-ff-ff-ff-ff-ff     static
SET Faa=""
SET Foo=""
SET Faa=""
IF !Faa! == "" ECHO %Foo% >> comp_list.txt
SET /a count=!count!+1
)

1 Ответ

0 голосов
/ 11 января 2019

Не используйте подстроку подстановки. Это ненадежно (так как каждый элемент IP может иметь 1, 2 или 3 цифры). Также вам не нужно проверять каждую запись на предмет правильной подсети - просто отфильтруйте вывод arp -a - это намного быстрее:

SET "SUB=146.254.181."
SET count=0
for /f %%a in ('arp -a^|find "%sub%"') do (
  set /a count+=1 
  >> "comp_list.txt" echo IP:%%a    Subnet: %%~na
)
>>"comp_list.txt" echo Sum: %count%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...