@ECHO OFF
SETLOCAL
SET Version=2.3
:: ***** Begin Script ChangeWINS.cmd *****
GOTO :MAIN

:USAGE
ECHO %~n0 v%Version%
ECHO.
ECHO Changes the WINS settings for all NICs on a Windows computer
ECHO.
ECHO Usage:     %~n0 ^<-F^|-L^|-R^>
ECHO        %~n0 -F
ECHO.
ECHO -F Fix the current settings: change static settings to
ECHO    Primary:   %PriWINS%
ECHO    Secondary: %SecWINS%
ECHO    Tertiary:  %TerWINS%
ECHO -L List the current settings; make no changes
ECHO -R Remove the current static settings and resort to DHCP
ECHO.
GOTO :eof



:SetWINSAdds
IF {%1.%2}=={172.26} (
        SET PriWINS=172.26.21.86
        SET SecWINS=172.23.15.39
        SET TerWINS=172.23.15.40
)
IF %3 LSS 141 GOTO :eof
IF %3 GTR 145 GOTO :eof
IF {%1.%2}=={192.168} (
        SET PriWINS=192.168.143.25
        SET SecWINS=172.23.15.39
        SET TerWINS=172.23.15.40
)
GOTO :eof



:2KWINS
IF DEFINED Error GOTO :eof
IF {%1}=={"Internal"} GOTO :eof
IF {%1}=={"Loopback"} GOTO :eof
ECHO   Interface %1
ECHO Deleting current WINS settings . . .
netsh inter ip delete wins %1 all
IF ERRORLEVEL 1 (
        ECHO    ** Error deleting old WINS settings
        ECHO    ** Aborting
        SET Error=True
        GOTO :eof
)
IF {%ChangeType%}=={R} GOTO :eof
ECHO Adding new primary WINS server %PriWINS% . . .
netsh inter ip add wins %1 %PriWINS%
IF ERRORLEVEL 1 (
        ECHO    ** Error adding new primary WINS server
        ECHO    ** Aborting
        SET Error=True
        GOTO :eof
)
ECHO Adding new secondary WINS server %SecWINS% . . .
netsh inter ip add wins %1 %SecWINS% index=2
IF ERRORLEVEL 1 (
        ECHO    ** Error adding new secondary WINS server
        ECHO    ** Aborting
        SET Error=True
)
ECHO Adding new tertiary WINS server %TerWINS% . . .
netsh inter ip add wins %1 %TerWINS% index=3
IF ERRORLEVEL 1 (
        ECHO    ** Error adding new tertiary WINS server
        ECHO    ** Aborting
        SET Error=True
)
ECHO.
GOTO :eof



:NTWINS
ECHO   Interface %1
ECHO Deleting current WINS settings . . .
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Adapters\%1" /v NameServer /d "" /f >NUL 2>&1
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Adapters\%1" /v NameServerBackup /d "" /f >NUL 2>&1
IF {%ChangeType%}=={R} (
        ECHO Renewing DHCP lease . . .
        ipconfig /renew >NUL
        GOTO :eof
)
ECHO Adding new primary WINS server %PriWINS% . . .
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Adapters\%1" /v NameServer /d "%PriWINS%" /f >NUL 2>&1
ECHO Adding new secondary WINS server %SecWINS% . . .
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Adapters\%1" /v NameServerBackup /d "%SecWINS%" /f >NUL 2>&1
ECHO.
ECHO This computer must be rebooted to apply these changes.
CALL GetInput "Enter YES to reboot:" Reboot
IF /i {%Reboot%}=={YES} shutdown /l /r /t:5 "%COMPUTERNAME% is shutting down to apply WINS changes." /c
GOTO :eof


:MAIN
SET PATH=\\172.23.15.28\BIN;\\172.23.15.28\SCRIPTS;%PATH%
SET PriWINS=172.23.15.39
SET SecWINS=172.23.15.40
SET TerWINS=172.24.62.50
FOR /f "TOKENS=2,4,5,6 DELIMS=. " %%a IN ('ipconfig ^| FIND "Address"') DO CALL :SetWINSAdds %%b %%c %%d
IF /i {%1}=={-F} (
        SET ChangeType=F
        GOTO :CheckOS
)
IF /i {%1}=={-L} GOTO :END
IF /i {%1}=={-R} (
        SET ChangeType=R
        GOTO :CheckOS
)
GOTO :USAGE

:CheckOS
osver -q
IF ERRORLEVEL 5 GOTO :Win2K
IF ERRORLEVEL 4 GOTO :WinNT
ECHO %~n0 can only be run on Windows NT or above.
ECHO.
GOTO :USAGE

:WinNT
ECHO Gathering current WINS settings . . .
FOR /f "TOKENS=*" %%i IN ('ipconfig /all ^| FIND "WINS Server"') DO ECHO %%i
ECHO.
FOR /f "TOKENS=1,2,3 DELIMS=    " %%a IN ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" /s 2^>NUL ^| find "ServiceName"') DO (
        FOR /f "SKIP=4 TOKENS=1,2,3 DELIMS=     " %%i IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\%%c\Parameters\Tcpip" /v "EnableDHCP" 2^>NUL') DO (
                IF {%ChangeType%}=={R} (
                        IF {%%k}=={0x1} CALL :NTWINS %%c
                ) ELSE (
                        CALL :NTWINS %%c
                )
        )
)
GOTO :END

:Win2K
ECHO Gathering current WINS settings . . .
FOR /f "TOKENS=*" %%i IN ('ipconfig /all ^| FIND "WINS Server"') DO ECHO %%i
ECHO.
FOR /f "TOKENS=*" %%a IN ('netsh i sh i ^| \\IC\BIN\perl -e "while (<>) { @a = split(/Dedicated        /); print $a[1]; }"') DO (
        CALL :2KWINS "%%a"
)

:END
FOR /f "TOKENS=*" %%i IN ('ipconfig /all ^| FIND "WINS Server"') DO ECHO %%i
ECHO Done