Показать полную графическую версию : [решено] Вставить в скрипт условие на проверку подключения к интернету
Есть такой скрипт на разрыв соединения, далее подключение и если не получается подключиться, попытки подключения продолжаются через интервал.
@echo off
:: Имя соединения
set connection=pppoe
:: Разорвать соединение
rasdial "%connection:"=%" /disconnect
:: Задержка между проверками, секунд
set pause=5
:LOOP
set connected=0
for /f "delims=" %%i in ('rasdial') do (
if "%%i"=="%connection:"=%" set connected=1
)
if %connected%==0 (
rasdial "%connection:"=%" ЛОГИН ПАРОЛЬ
ping -n %pause% 127.0.0.1>nul 2>&1
goto LOOP
) else (
exit
)
Скрипт нашёл в интернете.
Я конечно же ничерта не понимаю, что такое delims, что такое set connected, об остальном имею общее представление.
Скрипт работает.
Но уже год пытаюсь, но не получается вставить условие, чтобы после строки "rasdial "%connection:"=%" ЛОГИН ПАРОЛЬ" проверялось бы, установлено подключение или нет,
и в зависимости от этого уже - либо exit если установлено, либо пошёл на LOOP, если не установлено.
В оригинальном скрипте приходится ждать интервал даже после успешного установления подключения. Можно конечно просто удалить этот интервал, но мне нужно именно с ним.
Serguei Kouzmine
25-02-2024, 16:16
уже год пытаюсь, но не получается »
всё получится, при достаточной настойчивости или года уже не те ?
ping 8.8.8.8 | findstr -i reply > NUL
echo %errorlevel%
0
отключаем сетевую крату
ping 8.8.8.8 | findstr -i reply > NUL
echo %errorlevel%
1
зачем отключать сетевую карту? проверку наличия или отсутствия интернета надо сделать теми командами, которые уже есть в скрипте.
Serguei Kouzmine
27-02-2024, 03:06
отключать сетевую карту? »
чтобы продемонстировать чем отличается тест кода сети нет и когда есть
Serguei Kouzmine, а разве нельзя обойтись использованием только того, что уже есть в скрипте if "%%i"=="%connection:"=%" set connected=1
)
if %connected%==0 ( ?
Ведь на втором круге проверка наличия либо отсутствия подключения срабатывает как надо, и если подключение уже установлено, скрипт закрывается.
wow7, так?
@echo off
:: Имя соединения
set "connection=pppoe"
:: Разорвать соединение
rasdial "%connection:"=%" /disconnect
:: Задержка между проверками, секунд
set "pause=5"
:LOOP
Call :CHECKCONN
if %connected%==0 (
rasdial "%connection:"=%" ЛОГИН ПАРОЛЬ
ping -n %pause% 127.0.0.1>nul 2>&1
goto LOOP
)
:EOF
:CHECKCONN
set "connected=0"
for /f "delims=" %%i in ('rasdial') do (
if "%%i"=="%connection:"=%" set "connected=1"
)
NickM, нет, это работает точно так же, как и оригинальный скрипт. в случае успешного установления соединения всё равно выжидает установленный интервал, и только потом скрипт закрывается.
нет, это работает точно так же, как и оригинальный скрипт. »
А, так?
@echo off
cls
:: Имя соединения
set "connection=pppoe"
:: Разорвать соединение
rasdial "%connection:"=%" /disconnect
:: Задержка между проверками, секунд
set "pause=5"
:LOOP
call :CHECKCONN
if %connected%==0 (
rasdial "%connection:"=%" ЛОГИН ПАРОЛЬ
for /l %%a in (1,1,%pause%) do (call :TIMEOUT1)
goto :LOOP
)
goto :EOF
:TIMEOUT1
call :CHECKCONN
if %connected%==1 ( goto :EOF)
timeout /t 1 /nobreak > nul
:CHECKCONN
set "connected=0"
for /f "delims=" %%i in ('rasdial') do (
if "%%i"=="%connection:"=%" set "connected=1"
)
NickM, Да, теперь наконец работает! :up: Только зря отредактировал, в конце должно быть обязательно exit /b, а если просто exit, то вообще ничего не работает.
в конце должно быть обязательно exit /b, а если просто exit, то вообще ничего не работает. »
По факту, это конечно же лишнее, т.к. :EOF это и так означает "конец";
Да, теперь наконец работает! »
Отлично, походу изначально было не понятно, что Вам требовалось, ведь в изначальном сценарии проверка подключения выполнялась, но только для выхода из цикла требовалось ожидание таймаута.
ведь в изначальном сценарии проверка подключения выполнялась, но только для выхода из цикла требовалось ожидание таймаута. »
Вот именно что в изначальном уже было всё для проверки подключения.
Требовалось ожидание таймаута ТОЛЬКО в том случае, если подключение НЕ установлено, а если оно установлено, то никакой таймаут не нужен.
Изначальный сценарий этого не выполнял. Он ожидал таймаут в любом случае. Это и было проблемой.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.