Компьютерный форум 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=349808)

root221 16-10-2021 02:45 2968966

Перебор адресов для подключения
 
Здрав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 2968988

Код:

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 2969005

Еще варианты: организовать Ваш код в виде процедуры и в цикле её вызывать:
Код:

@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



Время: 23:44.

Время: 23:44.
© OSzone.net 2001-