|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - ping-скрипт |
|
|
CMD/BAT - ping-скрипт
|
|
Старожил Сообщения: 215 |
Здравствуйте!
Как можно грамотно реализовать данный скрипт (сам подход и вывод (возможно несколькими вариантами))? Сам скрипт (лучше пока не получилось): ::chcp 65001 ::chcp 65001>nul @echo off set ip=192.168.1.1 ping %ip% -n 1 | 1>nul find "TTL=" && (echo. & echo %ip% & echo - ok & echo.) || (echo. & echo %ip% - problem & echo.) set ip=192.168.1.2 ping %ip% -n 1 | 1>nul find "TTL=" && (echo. & echo %ip% & echo - ok & echo.) || (echo. & echo %ip% - problem & echo.) @pause а надо: и чтобы раскомментирование строчки с chcp не вызывало некорректной работы скрипта Также хотелось бы скриптом оценить не две, а три ситуации: - хост успешно отвечает, - превышен интервал ожидания для запроса, - хост не найден По локали ответ разный, хотелось бы ориентироваться на нечто типа %errorlevel%, но при превышении интервала ожидани она возвращает 0, то есть как и при успешном пинге. PS: попутно узнал, что называть командный файл типа ping.bat не стоило Спасибо! |
|
|
Отправлено: 02:09, 22-03-2014 |
|
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать С учётом всех Ваших пожеланий:
@echo off
chcp 65001>nul
for %%i in (192.168.1.1 192.168.1.2) do (
set ip=%%i
call:#
)
echo.
echo.
pause
exit /b
:#
(
for /f "skip=2 delims=" %%i in ('ping %ip% -n 1') do (
echo %%i| >nul findstr "TTL="&& (
echo.& echo %ip% - ok& echo.
exit /b
)|| (
echo.& echo %ip% - request timed out& echo.
exit /b
)
)
)|| (
echo.& echo %ip% - host not found& echo.
)
exit /b
Примечание: команда "find" не работает с кодовой страницей "65001", а команда "findstr" работает. |
|
Последний раз редактировалось Georgio, 22-03-2014 в 15:00. Отправлено: 14:49, 22-03-2014 | #2 |
|
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Цитата Georgio:
если на на первый взгляд, то пока не понял в чём идея определения превышения времени интервала ожидания (к тому же в приведённой реализации не работает: на каждый из приведённых узлов выводит request timed out, хотя один доступен, а второго не существует), но тут сначала надо осмыслить детали приведённого Цитата Georgio:
также остался непонятным момент с переносом ok в выводе моего скрипта, или следует воспринять это как |
||
|
Отправлено: 18:51, 22-03-2014 | #3 |
|
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Georgio, можете пояснить свой код (зачем там skip=2 и delim без значения, расстановку скобку для решения данной задачи и почему код не отрабатывает как должен)?
я, в свою очередь, дошёл до такого, хотя оно также не отрабатывает как предполагалось, очевидно, где-то пробелы в логике, хотя с виду вроде бы всё чётко setlocal enableDelayedExpansion
@echo off
chcp 65001 >nul
for %%i in (
192.168.1.1
192.168.1.2
) do (
echo.
set "ip=%%i"
call :#
echo.
)
endlocal
pause
exit /b
:#
for /f "tokens=*" %%i in ('ping !ip! -n 1') do (
if errorlevel 1 (
echo !ip! - host not found
exit /b
)
echo %%i |>nul findstr "TTL=" && (
echo !ip! - host found
exit /b
) || (
echo !ip! - request timed out
exit /b
)
)
|
|
Отправлено: 00:36, 26-03-2014 | #4 |
|
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать может кто подтолкнёт или без вариантов
![]() пока рабочий вариант с двумя вариантами @echo off chcp 65001 >nul for %%i in ( ya.ru ya.con google.com 192.168.1.1 192.168.1.2 ) do ( echo. ping %%i -n 1 |>nul findstr "TTL=" && ( echo %%i - ok ) || ( echo %%i - problem ) echo. ) echo. echo. echo. cmd /k Также может быть кто-нибудь знает: 1. как можно организовать логику типа ping %%i -n 1 |>nul findstr "TTL=" || ( команда в случае неудачного выполнения, эта часть работает ) || ( команда в противном случае, эта часть очевидно не работает ) 2. как можно оставить комментарий и использовать метки (если это возможно) в подобных местах (может экранировать как-то нужно или как-то по-другому) |
|
|
Отправлено: 23:16, 26-03-2014 | #5 |
|
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Цитата jah:
автору спасибо за то, до чего дойти по справке проблематично попробую ответить на ряд своих вопросов: Цитата jah:
строим логику таким образом, чтобы внутри цикла for были "успешные" команды (хост доступен, превышено время ожидания), оставшийся вариант будем расценивать как "хост недоступен" если хост недоступен, то ping возвращает ошибку, в приведённом варианте это не используется, используется возвращение ошибки самим циклом, для этого добавляется skip=2, в выводе на "хост не доступен" всего две строки, которые пропускаются, в результате в %%i нечего помещать и echo %%i приводит к ошибке, в результате которой работа цикла аварийно завершается, поэтому подхватывается код после || для самого цикла (а не внутри него) таким образом, код для host not found отрабатывает как надо Цитата jah:
Цитата jah:
Цитата jah:
Цитата jah:
PS: с остальными пока туго, буду разговаривать здесь с собой, пока не просветлею или не опустятся руки ![]() |
||||||
|
Отправлено: 23:28, 27-03-2014 | #6 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| VBS/WSH/JS - [решено] Дописать скрипт для процедуры ping и записи в log.txt | zavoruev | Скриптовые языки администрирования Windows | 14 | 18-10-2012 17:18 | |
| Любой язык - Как сделать что-бы скрипт игнорировал не нужные ответы Ping | root221 | Скриптовые языки администрирования Windows | 13 | 02-09-2012 22:28 | |
| VBS/WSH/JS - [решено] скрипт проверяет файл по дате после запускает другой скрипт | dot85 | Скриптовые языки администрирования Windows | 9 | 01-08-2011 14:22 | |
| Ping | Man itu | Сетевые технологии | 8 | 03-07-2004 23:59 | |
| Ping | Guest | Хочу все знать | 12 | 22-01-2003 04:16 | |
|