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 раз; после этого вы должны отредактировать файл и сбросить последнюю строку, чтобы она снова выглядела как оригинальная. При необходимости можно добавить дополнительный код, чтобы программа самостоятельно проверила это условие и исправила его автоматически.