Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] пропинговать ip адреса заданные в txt файле

Ответить
Настройки темы
CMD/BAT - [решено] пропинговать ip адреса заданные в txt файле

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: baradan2000
Дата: 14-04-2017
Задача такая: необходимо пропинговать ip адреса заданные в txt файле списком и те адреса по которым пинг есть вынести в отдельный файл с именем компьютера и ip адресом. Проблем с массовым пингом не возникло, а вот вынести в файл не получается. Вот код:
Код: Выделить весь код
FOR /F %%A IN (ips.txt) DO ping -n 1 -a %%A  | find /i  "domen.name" >> C:\ips_prom_res.txt
FOR /F "delims=:" %%B IN (ips_prom_res.txt) DO  set B=B:~0,4 echo B  >> C:\ips_result.txt
В ips_prom_res.txt заносится промежуточный результат, там всё в порядке. Далее нужно из каждой строки отсечь лишнее и полученный результат занести в ips_result.txt и вот хоть убей не пойму как это сделать.

Отправлено: 17:26, 14-04-2017

 

Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата baradan2000:
те адреса по которым пинг есть вынести в отдельный файл с именем компьютера и ip адресом
Фраза совершенно непонятна: то ли надо получить один текстовый файл с перечислением имен компьютеров и ip, то ли для каждого ip создать отдельный txt-файл.
Вот вариант с одним текстовым файлом
Код: Выделить весь код
@Echo Off
cls

chcp 437 >nul

Set "FileIp=ips.txt"
Set "FileOut=%~dpnx0.ips.txt"

Del "%FileOut%" 2>nul 
FOR /F "usebackq" %%p IN ("%FileIp%") DO Call :Pinguin "%%p"

GoTo :Eof

:Pinguin
	Echo %~1
	FOR /F "usebackq skip=1 tokens=2,3 delims= " %%i IN (`ping -4 -n 1 -a %~1`) DO (
		If /I "%%j"=="[%~1]" Echo %%i %%j>>"%FileOut%"
		GoTo :Eof
	)
GoTo :Eof
У меня комп не в домене, команда ping нигде не выдаёт строку "domen.name". Поэтому возможно этот мой вариант у Вас не отработает.
Хотелось бы получить от Вас файл после выполнения батника для нескольких пингующихся и непингующихся узлов
Код: Выделить весь код
@Echo Off
chcp 437 >nul

>ips_prom_res.txt (FOR /F %%A IN (ips.txt) DO ping -4 -n 1 -a %%A)
У меня выдача ping имеет вид
Код: Выделить весь код
Pinging My_Comp_Name [192.168.1.5] with 32 bytes of data:
Reply from 192.168.1.5: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.1.5:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

Pinging My_Comp_Name [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

Pinging 192.168.1.55 with 32 bytes of data:
Reply from 192.168.1.5: Destination host unreachable.

Ping statistics for 192.168.1.55:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),

Pinging 111.111.111.111 with 32 bytes of data:
Request timed out.

Ping statistics for 111.111.111.111:
    Packets: Sent = 1, Received = 0, Lost = 1 (100% loss),

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 15-04-2017 в 20:46.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:29, 15-04-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, первый вариант работает.
В файл попали и те ip по которым есть пинг и те которые без пинга, но были в DNS, т.е. пинга нет, но вернул строку с ip и доменным именем компа.
Можете пояснить по коду, а то не давно начал постигать азы?

Последний раз редактировалось baradan2000, 17-04-2017 в 09:49.


Отправлено: 09:14, 17-04-2017 | #3


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата baradan2000:
В файл попали и те ip по которым есть пинг и те которые без пинга, но были в DNS
Если Вас это не удовлетворяет, попробуйте этот вариант, полностью его проверить мне не на чем, я не в домене
Код: Выделить весь код
@Echo Off
cls

chcp 437 >nul

Set "FileIp=ips.txt"
Set "FileOut=%~dpnx0.ips.txt"

Del "%FileOut%" 2>nul 
FOR /F "usebackq" %%p IN ("%FileIp%") DO Call :Pinguin "%%p"

GoTo :Eof

:Pinguin
	Echo %~1
	Set "OutString="
	Set "OutTTL="
	FOR /F "usebackq skip=1 tokens=1,2,3,7 delims== " %%i IN (`ping -4 -n 1 -a %~1`) DO (
		If /I "%%k"=="[%~1]" Set "OutString=%%j %%k"
		If /I "%%l"=="TTL" Set "OutTTL=TTL"
		If /I "%%i"=="Reply" GoTo :Continue

	)
	:Continue
	If Not "%OutString%"=="" If Not "%OutTTL%"=="" Echo %OutString%>>"%FileOut%"
GoTo :Eof
Попробую объяснить, как это работает


Для обработки IP из списка текстового файла написал процедуру, в неё в виде аргумента передаётся IP.
Call :Pinguin "%%p"


Выдача ping обрабатывается в FOR (смотрите хелп FOR /?) для переданного в процедуру IP %~1
Первая строка ping пустая, мы её пропускаем ( skip=1 )
Выдачу ping разбираем на подстроки, в качестве разделителей подстрок выбираем "равно" и пробел. (delims== ")
Рассмотрим первые 2 информационные строки (на примере двух ответов, с пингом и без):
Код: Выделить весь код
Pinging My_Comp_Name [192.168.1.5] with 32 bytes of data:
Reply from 192.168.1.5: bytes=32 time<1ms TTL=128



Pinging 192.168.1.55 with 32 bytes of data:
Reply from 192.168.1.5: Destination host unreachable.
В первой строке нам интересна 2 и 3 подстрока, при наличии у пингуемого узла имени (например, здесь My_Comp_Name), третья подстрока содержит IP, это можно проверить в If и при совпадении с полученным в аргументе значением, записать в переменную имя узла и IP:
If /I "%%k"=="[%~1]" Set "OutString=%%j %%k"
В противном случае переменная OutString останется пустой.
Во второй строке нам интересно наличие в 7 подстроке параметра TTL, который выдаётся при наличии ответа узла.
Если TTL присутствует, делаем переменную OutTTL непустой.
If /I "%%l"=="TTL" Set "OutTTL=TTL"
Чтобы "поймать" вторую строку, смотрим первое слово, если оно Reply, то прекращаем обработку ping в FOR
If /I "%%i"=="Reply" GoTo :Continue
То есть нам для анализа строки выдачи ping понадобились 1,2,3,7 подстроки, что прописали в параметре FOR
tokens=1,2,3,7
Им соответствуют переменные цикла по алфавиту начиная с %%i: %%i %%j %%k %%l
Далее, если обе переменные непустые, записываю значение OutString в файл.
Важно: в начале батника я определил кодовую страницу
chcp 437 >nul
При этом выдача Ping ocуществляется на английском языке.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 17-04-2017 в 11:55.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:40, 17-04-2017 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо большое. Теперь всё понял. Тему можно закрывать.

Отправлено: 12:19, 17-04-2017 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] пропинговать ip адреса заданные в txt файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Выборка и txt по списку в txt файле cyberp1983 Скриптовые языки администрирования Windows 5 24-05-2018 20:27
CMD/BAT - [решено] Поиск в html файле ip адресов и копирование их в новый txt. 666egor666 Скриптовые языки администрирования Windows 10 02-05-2015 19:46
CMD/BAT - Поиск в html файле ip адресов и копирование их в новый txt. 666egor666 Тест-форум 0 30-04-2015 11:31
CMD/BAT - Замена строки в txt файле Сергей_Першин@vk Скриптовые языки администрирования Windows 0 07-06-2012 14:56
Router - D-Link DIR-300 help IP, определение внешнего IP адреса ? sushnyak Сетевое оборудование 25 31-01-2009 18:26




 
Переход