Показать полную графическую версию : [решено] Не всегда отрабатывается условие при использовании rasdial
Здравствуйте.
Для автоматического дозвона в нужное время используется скрипт вида:
rasdial имя_соединения логин пароль
if errorlevel 600 (call reconnect.cmd)
exit
Скрипт выполняется через стандартный Планировщик задач Windows.
Дело в том, что условие выполняется несколько первых раз (обычно 2 или вообще 1 раз), а затем игнорируется скриптом, т.е. если мы имеем на выходе команды rasdial номер ошибки 600 и более, то выполняется сразу exit минуя IF. Подозреваю, что виноват крон, хотя не сильно знаком с особенностями переменной ERRORLEVEL, может тут собака порылась? При ручном запуске скрипт работает идеально. Буду благодарен любой помощи.
Система: HP DC7700 Intel Core 2 DUO 6400 2.13 GHz, 2Gb DDR2 RAM, 80 Gb HDD
ОС: Windows XP SP3 (из дополнительного ПО: OpenOffice 3.0.1 и 7zip 4.65)
Petya V4sechkin
29-04-2009, 14:49
номер ошибки 600 и более
А почему именно 600 и более?
Альтернативный вариант с командой Ping:
:Loop
Ping -n 1 -l 1 ya.ru
If %ErrorLevel% Neq 0 (
Rasdial имя_соединения логин пароль
GoTo :Loop
)
Maza Faka
29-04-2009, 14:55
hosco
Попробуйте так:
@Echo Off
:_Connect
rasdial имя_соединения логин пароль
If Not %ERRORLEVEL%==0 GoTo :_Connect
Потому что ошибки Dial-Up соединения начинаются с 600 (линия занята, удалённый компьютер не отвечает и т.п.), в частности последний раз была 678-я, при которой условие не сработало (хотя, повторюсь, при ручном запуске срабатывает). Машина не имеет доступа в Интернет, локалхост также пинговать не желательно, да и вообще пинг отпадает.
Попробуйте так: »
По сути это тоже самое, только вид сбоку, можно конечно попробовать, GOTO только на CALL заменить. Намёк на то, что ошибка может не попадать в мой начальный диапазон и нужно делать изначально диапазон отличный от 0, но я в предыдущем сообщении написал, что ошибка 100% попадает в диапазон, но не отрабатывает.
А можно как-нибудь всё сделать в одном скрипте? У меня при ошибке вызывается другой скрипт с содержанием:
:reconnect
delay 30000
rasdial имя_соединения логин пароль
if %errorlevel% neq 0 goto reconnect
Т.е. в основном файле не нужна задержка (delay.exe самописная программка, т.к. пинг не приветствуется), поэтому сделали таким образом. Так вот вопрос, можно-ли это реализовать в одном скрипте, но чтобы задержка не всегда срабатывала, а только при ошибках?
rasdial имя_соединения логин пароль
if %errorlevel%==600 (
call :reconnect
)
exit
:reconnect
delay 30000
rasdial имя_соединения логин пароль
if %errorlevel% neq 0 goto reconnect
goto :eof
пинг на 127.0.0.1 тоже не приветствуется ?
я дак делаю задержку так
ping -n 70 -w 1000 127.0.0.1 > nul
70 - секунды
а еще есть программа sleep если не ошибаюсь.
Да, я выше написал, что любой пинг не приветствуется, в том числе и локалхост, sleep есть только при установленном Ресурс Ките, если я не ошибаюсь, а он только для серверов. Спасибо, так вроде работает.
тут (http://wiki.oszone.net/index.php/Пауза_в_пакетном_файле) написано про паузу, в том числе и про sleep который я имел ввиду.
тут написано »
Спасибо, уже разобрался, видно, что нормальную паузу (не ping) можно реализовать только с помощью сторонних утилит, которые мы и использовали изначально.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.