|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] пропинговать ip адреса заданные в txt файле |
|
CMD/BAT - [решено] пропинговать ip адреса заданные в txt файле
|
Новый участник Сообщения: 3 |
Задача такая: необходимо пропинговать ip адреса заданные в txt файле списком и те адреса по которым пинг есть вынести в отдельный файл с именем компьютера и ip адресом. Проблем с массовым пингом не возникло, а вот вынести в файл не получается. Вот код:
В ips_prom_res.txt заносится промежуточный результат, там всё в порядке. Далее нужно из каждой строки отсечь лишнее и полученный результат занести в ips_result.txt и вот хоть убей не пойму как это сделать. |
|
Отправлено: 17:26, 14-04-2017 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата baradan2000:
Вот вариант с одним текстовым файлом
@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 имеет вид
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
|
Профиль | Отправить PM | Цитировать Спасибо, первый вариант работает.
В файл попали и те ip по которым есть пинг и те которые без пинга, но были в DNS, т.е. пинга нет, но вернул строку с ip и доменным именем компа. Можете пояснить по коду, а то не давно начал постигать азы? |
Последний раз редактировалось baradan2000, 17-04-2017 в 09:49. Отправлено: 09:14, 17-04-2017 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата baradan2000:
Если Вас это не удовлетворяет, попробуйте этот вариант, полностью его проверить мне не на чем, я не в домене
@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. 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
|
Профиль | Отправить PM | Цитировать Спасибо большое. Теперь всё понял. Тему можно закрывать.
|
|
Отправлено: 12:19, 17-04-2017 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|