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

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

wow7 25-02-2024 14:36 3024630

Вставить в скрипт условие на проверку подключения к интернету
 
Есть такой скрипт на разрыв соединения, далее подключение и если не получается подключиться, попытки подключения продолжаются через интервал.

Код:

@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 3024637

Цитата:

Цитата wow7
уже год пытаюсь, но не получается »


всё получится, при достаточной настойчивости или года уже не те ?


Код:

ping 8.8.8.8 | findstr -i reply > NUL
echo %errorlevel%
0

отключаем сетевую крату


Код:

ping 8.8.8.8 | findstr -i reply > NUL
echo %errorlevel%
1


wow7 25-02-2024 18:08 3024645

зачем отключать сетевую карту? проверку наличия или отсутствия интернета надо сделать теми командами, которые уже есть в скрипте.

Serguei Kouzmine 27-02-2024 03:06 3024700

Цитата:

Цитата wow7
отключать сетевую карту? »

чтобы продемонстировать чем отличается тест кода сети нет и когда есть

wow7 27-02-2024 08:35 3024705

Serguei Kouzmine, а разве нельзя обойтись использованием только того, что уже есть в скрипте if "%%i"=="%connection:"=%" set connected=1
)
if %connected%==0 ( ?
Ведь на втором круге проверка наличия либо отсутствия подключения срабатывает как надо, и если подключение уже установлено, скрипт закрывается.

NickM 27-02-2024 09:11 3024706

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"
)


wow7 27-02-2024 21:41 3024719

NickM, нет, это работает точно так же, как и оригинальный скрипт. в случае успешного установления соединения всё равно выжидает установленный интервал, и только потом скрипт закрывается.

NickM 28-02-2024 13:20 3024742

Цитата:

Цитата wow7
нет, это работает точно так же, как и оригинальный скрипт. »

А, так?
Код:

@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"
)


wow7 28-02-2024 18:27 3024755

NickM, Да, теперь наконец работает! :up: Только зря отредактировал, в конце должно быть обязательно exit /b, а если просто exit, то вообще ничего не работает.

NickM 28-02-2024 21:09 3024770

Цитата:

Цитата wow7
в конце должно быть обязательно exit /b, а если просто exit, то вообще ничего не работает. »

По факту, это конечно же лишнее, т.к. :EOF это и так означает "конец";

Цитата:

Цитата wow7
Да, теперь наконец работает! »

Отлично, походу изначально было не понятно, что Вам требовалось, ведь в изначальном сценарии проверка подключения выполнялась, но только для выхода из цикла требовалось ожидание таймаута.

wow7 29-02-2024 07:32 3024780

Цитата:

Цитата NickM
ведь в изначальном сценарии проверка подключения выполнялась, но только для выхода из цикла требовалось ожидание таймаута. »

Вот именно что в изначальном уже было всё для проверки подключения.
Требовалось ожидание таймаута ТОЛЬКО в том случае, если подключение НЕ установлено, а если оно установлено, то никакой таймаут не нужен.
Изначальный сценарий этого не выполнял. Он ожидал таймаут в любом случае. Это и было проблемой.


Время: 20:52.

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