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

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

hosco 29-04-2009 13:36 1107146

Не всегда отрабатывается условие при использовании 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 1107193

Цитата:

Цитата hosco
номер ошибки 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 1107200

hosco
Попробуйте так:
Код:

@Echo Off

:_Connect
rasdial имя_соединения логин пароль
If Not %ERRORLEVEL%==0 GoTo :_Connect


hosco 29-04-2009 14:57 1107201

Потому что ошибки Dial-Up соединения начинаются с 600 (линия занята, удалённый компьютер не отвечает и т.п.), в частности последний раз была 678-я, при которой условие не сработало (хотя, повторюсь, при ручном запуске срабатывает). Машина не имеет доступа в Интернет, локалхост также пинговать не желательно, да и вообще пинг отпадает.

Цитата:

Цитата Maza Faka
Попробуйте так: »

По сути это тоже самое, только вид сбоку, можно конечно попробовать, GOTO только на CALL заменить. Намёк на то, что ошибка может не попадать в мой начальный диапазон и нужно делать изначально диапазон отличный от 0, но я в предыдущем сообщении написал, что ошибка 100% попадает в диапазон, но не отрабатывает.

hosco 30-04-2009 10:12 1107770

А можно как-нибудь всё сделать в одном скрипте? У меня при ошибке вызывается другой скрипт с содержанием:
Код:

:reconnect
delay 30000
rasdial имя_соединения логин пароль
if %errorlevel% neq 0 goto reconnect

Т.е. в основном файле не нужна задержка (delay.exe самописная программка, т.к. пинг не приветствуется), поэтому сделали таким образом. Так вот вопрос, можно-ли это реализовать в одном скрипте, но чтобы задержка не всегда срабатывала, а только при ошибках?

mitiya 30-04-2009 13:01 1107896

Код:


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 если не ошибаюсь.

hosco 30-04-2009 14:16 1107949

Да, я выше написал, что любой пинг не приветствуется, в том числе и локалхост, sleep есть только при установленном Ресурс Ките, если я не ошибаюсь, а он только для серверов. Спасибо, так вроде работает.

mitiya 30-04-2009 16:35 1108078

тут написано про паузу, в том числе и про sleep который я имел ввиду.

hosco 04-05-2009 10:16 1110251

Цитата:

Цитата mitiya
тут написано »

Спасибо, уже разобрался, видно, что нормальную паузу (не ping) можно реализовать только с помощью сторонних утилит, которые мы и использовали изначально.


Время: 02:12.

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