![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 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 |
|