2014-11-12 11 views
0

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

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

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

Scrip 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 

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

ответ

0

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

@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 

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

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

0
@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 выбирает только) и переключиться на другой

0

Реала «один клик» код, не паузы, но время ожидания : (Улучшение кода 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