Войти

Показать полную графическую версию : [решено] Перебор адресов для подключения


root221
16-10-2021, 02:45
Здравcтвуйте, нужно решить задачу

Вот код, который нужно изменить так, чтоб переменная IP бралась из списка ip.txt и по нажатию Enter нужно отключиться от VPN и подключиться к следующему IP из файла, логин и пароль на всех компьютерах одинаковый.



@echo off

setlocal ENABLEDELAYEDEXPANSION
set conn="lan"
set login="lan"
set pass="lan"

set ip=192.168.10.1

rasdial | find %conn%
if Errorlevel 1 (
rasdial %conn% %login% %pass% /phone:%ip% > nul
if !Errorlevel!==623 echo Подключения нет, нужно создавать
if !Errorlevel!==691 echo Ошибка в логине и пароле
if !Errorlevel!==0 echo %ip% подключились

) else (
@rasdial 1 /disconnect
)
endlocal
pause

Список адресов храню в следующем формате

192.168.10.1
192.168.10.2
192.168.10.3
192.168.10.4
192.168.10.5

Iska
16-10-2021, 12:40
for /f "usebackq delims=" %%i in ("ip.txt") do (
rasdial | find.exe %conn% && (
rasdial 1 /disconnect
) || (
>nul rasdial %conn% %login% %pass% /phone:%%~i
if !Errorlevel!==623 echo Подключения нет, нужно создавать
if !Errorlevel!==691 echo Ошибка в логине и пароле
if !Errorlevel!==0 echo %%~i подключились
)
)

вместо:
set ip=192.168.10.1

rasdial | find %conn%
if Errorlevel 1 (
rasdial %conn% %login% %pass% /phone:%ip% > nul
if !Errorlevel!==623 echo Подключения нет, нужно создавать
if !Errorlevel!==691 echo Ошибка в логине и пароле
if !Errorlevel!==0 echo %ip% подключились

) else (
@rasdial 1 /disconnect
)
Не проверялось.

megaloman
16-10-2021, 16:02
Еще варианты: организовать Ваш код в виде процедуры и в цикле её вызывать:@Echo Off
cls
setlocal ENABLEDELAYEDEXPANSION
set conn="lan"
set login="lan"
set pass="lan"

For /F "usebackq delims=" %%p In ("Z:\Box_In\ip.txt") Do Call :IP %%p

endlocal
pause
Exit /B

:IP
Echo +++ IP=%1
set "ip=%1"
rasdial | find %conn%
if Errorlevel 1 (
rasdial %conn% %login% %pass% /phone:%ip% > nul
if !Errorlevel!==623 echo Подключения нет, нужно создавать
if !Errorlevel!==691 echo Ошибка в логине и пароле
if !Errorlevel!==0 echo %ip% подключились

) else (
@rasdial 1 /disconnect
)
Exit /B
В принципе не вижу смысла в отдельном ip.txt файле.@Echo Off
cls
setlocal ENABLEDELAYEDEXPANSION
set conn="lan"
set login="lan"
set pass="lan"

Call :IP 192.168.10.1
Call :IP 192.168.10.2
Call :IP 192.168.10.3
Call :IP 192.168.10.4
Call :IP 192.168.10.5

endlocal
pause
Exit /B
Процедура :IP та же.
Красным Выделил куски Вашего кода, которые мной не отлаживались.
@Echo Off
cls
Rem Call :Ip IP "conn" "login" "pass"

Call :IP 192.168.10.1 "lan" "lan" "lan"
Call :IP 192.168.10.2 "lan" "lan" "lan"
Call :IP 192.168.10.3 "lan" "lan" "lan"
Call :IP 192.168.10.4 "lan" "lan" "lan"
Call :IP 192.168.10.5 "lan" "lan" "lan"
pause
Exit /B

:IP
Echo +++ IP=%1
rasdial | find %2 && (@rasdial 1 /disconnect &Exit /B)

>nul rasdial %2 %3 %4 /phone:%1 > nul
If %Errorlevel%==623 Echo Подключения нет, нужно создавать
If %Errorlevel%==691 Echo Ошибка в логине и пароле
If %Errorlevel%==0 Echo %1 подключились
Exit /B




© OSzone.net 2001-2012