1 скрипт для переключения на статический IP или DHCP и обратно

Есть ли способ иметь 1 скрипт, который проверяет текущие настройки IP (DHCP или Static), а затем чередуется с другим.

В настоящее время у меня есть один скрипт для установки DHCP, а другой для установки IP. Я хотел бы один скрипт, который смотрит на текущие настройки, а затем переключается на другой. В идеальном мире у него была бы пауза, сообщающая пользователю, в каком направлении он переключается.

Это то, что я использую до сих пор.

Скрипт 1

@echo Be sure Network Cable is unplugged and

@pause

netsh int ipv4 set address name="Local Area Connection" source=static address=10.38.xxx.xxx mask=255.255.255.xxx gateway=10.38.xxx.xx

netsh int ipv4 set dns name="Local Area Connection" source=static address=10.99.xx.xx register=primary validate=no

Сценарий 2

netsh interface ipv4 set address name="Local Area Connection" source=dhcp

netsh interface ipv4 set dnsservers name="Local Area Connection" source=dhcp

@echo It may take a few moments for changes to take effect. You may close this window or
@pause

Большое спасибо за Вашу помощь.

3 ответа

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "name=Local Area Connection"

    echo Be sure Network Cable is unplugged and
    pause

    netsh interface ipv4 show addresses "%name%" | findstr /r /i /c:"DHCP.*No$" >nul 2>nul 

    if errorlevel 1 (

        echo DHCP mode - Press any key to change to static IP
        pause >nul 
        netsh int ipv4 set address name="%name%" source=static address=10.38.xxx.xxx  mask=255.255.255.xxx  gateway=10.38.xxx.xx
        netsh int ipv4 set dns     name="%name%" source=static address=10.99.xx.xx    register=primary      validate=no

    ) else (

        echo Static mode - Press any key to change to DHCP
        pause >nul 
        netsh interface ipv4 set address    name="%name%" source=dhcp
        netsh interface ipv4 set dnsservers name="%name%" source=dhcp
    )

    echo It may take a few moments for changes to take effect. You may close this window or
    pause

В данный момент я не могу проверить это, но... Проверьте текущее состояние (код ищет DHCP .... No) и переключиться на другой

Реальный код "одним щелчком", не паузы, а тайм-ауты: (улучшение кода MC ND)

@echo off
setlocal enableextensions disabledelayedexpansion

rem #### ADAPTOR'S NAME  ####
set "name=Ethernet"

rem #### IP ####
set "ip=10.19.51.123"

rem #### GATEWAY ####
set "gw=10.19.51.14"

rem #### MASK ####
set "mask=255.255.255.0"

rem #### DNS ####
set "dns1=8.8.8.8"
set "dns2=8.8.4.4"


netsh interface ipv4 show addresses "%name%" | findstr /r /i /c:"ip.*%ip%$" >nul 2>nul 

if errorlevel 1 (

    echo ENTERING MANUAL IP MODE.
    ping 127.0.0.1 -n 2 > nul
    netsh int ipv4 set address name="%name%" source=static address=%ip%     mask=%mask%           gateway=%gw%
    netsh int ipv4 set dns     name="%name%" source=static address=%dns1%   register=primary      validate=no
    netsh interface ip add dns name="%name%"               address=%dns2%   index=2               validate=no

) else (

    echo ENTERING DHCP MODE.
    ping 127.0.0.1 -n 2 > nul
    netsh interface ipv4 set address    name="%name%" source=dhcp
    netsh interface ipv4 set dnsservers name="%name%" source=dhcp
)

echo CLOSING...
ping 127.0.0.1 -n 2 > nul

Вы можете использовать этот интересный трюк:

@echo off
setlocal

call :getFlipFlop
if %flipFlop:~-1% equ 0 (
   echo Passing to ON state
   set /P "=1" <NUL >>"%~F0"
   rem Place here the commands for ON state...
) else (
   echo Passing to OFF state
   set /P "=0" <NUL >>"%~F0"
   rem Place here the commands for OFF state...
)
goto :EOF


rem Do NOT place anything below these lines
:getFlipFlop
set flipFlop=0

Очень важно, чтобы последняя строка (set flipFlop=0) НЕ заканчивалась символами новой строки (CR+LF). Скопируйте и вставьте предыдущий код, перейдите к последнему символу (Ctrl-End) и удалите последние символы с помощью BackSpace, если необходимо, чтобы последний символ был "0" перед сохранением файла.

Этот трюк работает только 8180 раз; после этого вы должны отредактировать файл и сбросить последнюю строку, чтобы она снова выглядела как оригинальная. При необходимости можно добавить дополнительный код, чтобы программа самостоятельно проверила это условие и исправила его автоматически.

Другие вопросы по тегам