Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Ping сети и действие в зависимости от результата, например запуск плеера (http://forum.oszone.net/showthread.php?t=233229)

Alex-_- 20-04-2012 16:18 1903254

Ping сети и действие в зависимости от результата, например запуск плеера
 
Хочу сделать скрипт, который бы пинговал сеть и в зависимости от результата пинга что-то делал, например запускал плеер. В итоге у меня получился скрипт такого плана:

: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 1903281

Alex-_-, можно в одну строчку:
Код:

Ping -n 1 имя_или_IP-адрес >nul && Start "ring" "%ProgramFiles%\AIMP2\AIMP2.exe"

Alex-_- 20-04-2012 17:06 1903293

Цитата:

Цитата Petya V4sechkin
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 1903393

Цитата:

Цитата Alex-_-
&& продолжает выполнение команды, если первая часть выполнена? »

Не совсем. «&&» означает, что следующая за ним команда выполнится при условии, если предыдущая команда вернёт нулевой код возврата (в терминах пакетных файлов — «errorlevel»).

Цитата:

Цитата Alex-_-
Тогда так можно еще зациклить »

Код:

: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 1903642

Цитата:

Цитата Iska
Не совсем. «&&» означает, что следующая за ним команда выполнится при условии, если предыдущая команда вернёт нулевой код возврата (в терминах пакетных файлов — «errorlevel»). »

Насчет && точно, читал, на насчет пинга вроде вычитал, что никакой errorlevel он не возвращает, только если ошибка в синтаксисе команды

Iska 21-04-2012 14:03 1903676

Цитата:

Цитата Alex-_-
на насчет пинга вроде вычитал, что никакой errorlevel он не возвращает, только если ошибка в синтаксисе команды »

Вполне возможно, что так оно когда-то было (или стало ;)). Но ведь можно и просто проверить. Откройте командную строку, и выполните:
Код:

ping.exe -n 1 www.ya.ru && echo Ok || echo Failure
Код:

ping.exe -n 1 bla.bla.bla && echo Ok || echo Failure


Время: 14:14.

Время: 14:14.
© OSzone.net 2001-