Войти

Показать полную графическую версию : [решено] Ping сети и действие в зависимости от результата, например запуск плеера


Alex-_-
20-04-2012, 16:18
Хочу сделать скрипт, который бы пинговал сеть и в зависимости от результата пинга что-то делал, например запускал плеер. В итоге у меня получился скрипт такого плана:

:Line1
rem Пингуем сеть и записываем результат в лог
ping ... > ping.log
pause
rem проверяем, есть ли в результате типичное для удачного пинга слово TTL и присваиваем переменной р
for /F "delims=" %%p IN ('find /C /I "TTL" "C:\Users\user03\Desktop\ping.log"') DO (SET p=%%p)
rem если есть хотя бы одно совпадение - запускаем плеер, если нет - пингуем заново
IF p=="....(не знаю что присвоить)" Start "ring" /d "C:\Program Files\AIMP2\" "AIMP2.exe" /b ELSE goto Line1
pause

Все бы ничего, но результатом find становится не количество найденных строк, как хотелось бы, а уродливая строка вида
----------C:\USERS\USER03\DESKTOP\PING.LOG: 2
до последней цифры эта писанина мне нафиг не нужна, можно ли как-то присвоить не всю эту строку переменной р, а только последний символ???? Обыскал весь гугл на эту тему - не нашел((((

пытался в If поставить
IF NOT p=="---------- C:\USERS\USER03\DESKTOP\PING.LOG: 0 " Start "ring" /d "C:\Program Files\AIMP2\" "AIMP2.exe" /b ELSE goto Line1
чтобы обработать хотя бы такой вариант, но результат find - строка с пробелом и переводом на следующую строку, как это отобразить в условии?

Petya V4sechkin
20-04-2012, 16:52
Alex-_-, можно в одну строчку:
Ping -n 1 имя_или_IP-адрес >nul && Start "ring" "%ProgramFiles%\AIMP2\AIMP2.exe"

Alex-_-
20-04-2012, 17:06
Alex-_-, можно в одну строчку:
Код:
Ping -n 1 имя_или_IP-адрес >nul && Start "ring" "C:\Program Files\AIMP2\AIMP2.exe" »

Спасибо большое, а я второй день долбаюсь...
>nul как я понял скрывает ошибку пинга, а && продолжает выполнение команды, если первая часть выполнена?

Тогда так можно еще зациклить, чтобы пинговало, пока связи нет, а как появится - запустить плеер и выходить, крутотенечка!!!

:Line1
Ping -n 1 [url] >nul && Start "ring" "C:\Program Files\AIMP2\AIMP2.exe" && Exit
goto Line1

Iska
20-04-2012, 19:47
&& продолжает выполнение команды, если первая часть выполнена? »
Не совсем. «&&» означает, что следующая за ним команда выполнится при условии, если предыдущая команда вернёт нулевой код возврата (в терминах пакетных файлов — «errorlevel»).

Тогда так можно еще зациклить »
:Line1
Ping -n 1 [url] >nul && (Start "ring" "C:\Program Files\AIMP2\AIMP2.exe" & Exit) || Ping -n 2 127.0.0.1 >nul
goto Line1

Alex-_-
21-04-2012, 12:34
Не совсем. «&&» означает, что следующая за ним команда выполнится при условии, если предыдущая команда вернёт нулевой код возврата (в терминах пакетных файлов — «errorlevel»). »
Насчет && точно, читал, на насчет пинга вроде вычитал, что никакой errorlevel он не возвращает, только если ошибка в синтаксисе команды

Iska
21-04-2012, 14:03
на насчет пинга вроде вычитал, что никакой errorlevel он не возвращает, только если ошибка в синтаксисе команды »
Вполне возможно, что так оно когда-то было (или стало ;)). Но ведь можно и просто проверить. Откройте командную строку, и выполните:
ping.exe -n 1 www.ya.ru && echo Ok || echo Failure
ping.exe -n 1 bla.bla.bla && echo Ok || echo Failure




© OSzone.net 2001-2012