『楼 主』:
【原创】我的更改网络IP、网关、DNS批处理源码
公司里,经常更换IP,网关也有三个。所以自己写了个网络切换的批处理,
后期又加入了可以自己设置IP地址和读INI设置的功能。
代码如下,支持XP系统。
网络上很多这种工具了,
批处理实现的代码也有很多,
不过自己写的话更有成就感些。
@echo off
color 17
title NetChange 版本:2.0 BY 碎星
::变量名以NET开头,以便后面屏蔽
mode con lines=30
setlocal enabledelayedexpansion
::全屏代码
::echo exit|!ComSpec! /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul
::chcp 437>nul
::graftabl 936>nul
cls
::-----常用IP、网关、DNS设置开始
::设置文件NetChange.ini存在则读取该ini设置
if exist NetChange.ini (
for /f "eol=; tokens=1,2 delims==" %%i in (NetChange.ini) do (
if "%%i"=="常用IP1" set net_often_ip1=%%j
if "%%i"=="常用IP2" set net_often_ip2=%%j
if "%%i"=="常用网关1" set net_often_gw1=%%j
if "%%i"=="常用网关2" set net_often_gw2=%%j
if "%%i"=="常用网关3" set net_often_gw3=%%j
if "%%i"=="常用DNS1_名称" set net_often_dns1=%%j
if "%%i"=="常用DNS1_首选" set net_often_dns1_pr=%%j
if "%%i"=="常用DNS1_备用" set net_often_dns1_se=%%j
if "%%i"=="常用DNS2_名称" set net_often_dns2=%%j
if "%%i"=="常用DNS2_首选" set net_often_dns2_pr=%%j
if "%%i"=="常用DNS2_备用" set net_often_dns2_se=%%j
)
)
::如不存在设置文件或设置为空则设为以下设置
if "!net_often_ip1!"=="" set net_often_ip1=192.9.200.202
if "!net_often_ip2!"=="" set net_often_ip2=192.9.200.205
if "!net_often_gw1!"=="" set net_often_gw1=192.9.200.229
if "!net_often_gw2!"=="" set net_often_gw2=192.9.200.3
if "!net_often_gw3!"=="" set net_often_gw3=192.9.200.185
if "!net_often_dns1!"=="" set net_often_dns1=电信
if "!net_often_dns1_pr!"=="" set net_often_dns1_pr=61.139.2.69
if "!net_often_dns2_se!"=="" set net_often_dns1_se=202.98.96.68
if "!net_often_dns2!"=="" set net_often_dns2=长宽
if "!net_often_dns2_pr!"=="" set net_often_dns2_pr=211.162.130.8
if "!net_often_dns2_se!"=="" set net_often_dns2_se=119.6.6.6
::-----常用IP、网关、DNS设置结束
set net_mask=255.255.255.0
set net_GM=1
echo 当前网络设置获取中...
::-----从注册表读取当前网络设置
set net_ok=HKLM\SYSTEM\CurrentControlSet
(for /f %%i in ('net config workstation ^| find /i "NetBT_Tcpip"') do set net_netid=%%i) || (cls &echo 网络连接不存在或被禁用, 按任意键退出... &pause > nul &goto end)
for /f "tokens=3 delims=_" %%i in ("!net_netid!") do set net_netid=%%i
set net_pk=!net_ok!\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\!net_netid!\Connection
set net_ok=!net_ok!\services\tcpip\parameters\interfaces\!net_netid!
::读取连接名称
for /f "tokens=3" %%i in ('reg query !net_pk! /v Name') do set net_nic=%%i
::读取IP
for /f "skip=4 tokens=3" %%i in ('reg query !net_ok! /v IPAddress') do set net_ip=%%i
::读取DNS
for /f "skip=4 tokens=3" %%i in ('reg query !net_ok! /v NameServer') do set net_dns=%%i
::读取网关
for /f "skip=4 tokens=3" %%i in ('reg query !net_ok! /v DefaultGateway') do set net_gw=%%i
for /f "delims=\" %%i in ("!net_ip!") do set net_ip=%%i
for /f "delims=\" %%i in ("!net_gw!") do set net_gw=%%i
for /f "tokens=1 delims=," %%i in ("!net_dns!") do set net_dns1=%%i
for /f "tokens=2 delims=," %%i in ("!net_dns!") do set net_dns2=%%i
::-----或者用IPCONFIG命令读取当前网络设置
::MAC地址
rem for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| find /i "Physical Address"') do set net_pa=%%i
::IP地址
rem for /f "tokens=2 delims=:" %%i in ('ipconfig ^| find /i "IP Address"') do set net_ip=%%i
::默认网关
rem for /f "tokens=2 delims=:" %%i in ('ipconfig ^| find /i "Default Gateway"') do set net_gw=%%i
::掩码地址
rem for /f "tokens=2 delims=:" %%i in ('ipconfig ^| find /i "Subnet Mask"') do set net_mask=%%i
::首选DNS服务器
rem for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| find /i "DNS Servers"') do set net_dns1=%%i
:ipset
call :show
echo ---------------------------IP 设置---------------------------
echo.
echo (1) !net_often_ip1!
echo.
echo (2) !net_often_ip2!
echo.
echo (3) 设置新的IP
echo.
echo --------------------------------------------------------------
echo (Q) 退出
echo --------------------------------------------------------------
echo.
echo 当前IP地址【!net_ip!】
echo.
set net_ipchoice=
set /p net_ipchoice=回车默认为当前IP, 请选择【1, 2, 3】:
if /i "!net_ipchoice!"=="q" goto end
if /i "!net_ipchoice!"=="3" goto set_ip
if /i "!net_ipchoice!"=="2" (set net_newip=!net_often_ip2!
goto gwset)
if /i "!net_ipchoice!"=="1" (set net_newip=!net_often_ip1!
goto gwset)
if /i "!net_ipchoice!"=="" (set net_newip=!net_ip!
goto gwset)
::输入无效时蜂鸣器发声3次
echo.
echo 无效的选择,请重新输入!
goto ipset
:set_ip
cls
echo.
echo 回车默认为当前IP【!net_ip!】
echo.
echo 请输入新的IP地址, 输入格式为【*.*.*.*】:
set net_newip=
set /p net_newip=
if /i "!net_newip!"=="" set net_newip=!net_ip!&goto gwset
rem 以X替换输入的特殊字符开始
set "net_newip=!net_newip:|=X!"
set "net_newip=!net_newip:&=X!"
set "net_newip=!net_newip:<=X!"
set "net_newip=!net_newip:>=X!"
set "net_newip=!net_newip:"=X!"
set "net_newip=!net_newip:'=X!"
set "net_newip=!net_newip:(=X!"
set "net_newip=!net_newip:)=X!"
set "net_newip=!net_newip:%%=X!"
set "net_newip=!net_newip:@=X!"
set "net_newip=!net_newip:^=X!"
set "net_newip=!net_newip:`=X!"
::以NET做标记屏蔽用!!号输入的变量
set "net_newip=!net_newip:net=X!"
rem 以X替换输入的特殊字符结束
set "net_newip=!net_newip: =!"
set net_returnip=false
call :checkip !net_newip!
if /i "!net_returnip!"=="false" echo.&echo 无效地址,请重新输入!&goto set_ip
set net_newip=!net_returnip!
:gwset
call :show
echo --------------------------网关 设置--------------------------
echo.
echo (1) !net_often_gw1!
echo.
echo (2) !net_often_gw2!
echo.
echo (3) !net_often_gw3!
echo.
echo (4) 设置新的网关
echo.
echo (5) 返回上一步
echo.
echo --------------------------------------------------------------
echo (Q) 退出
echo --------------------------------------------------------------
echo.
echo 当前网关地址【!net_gw!】
echo.
set net_gwchoice=
set /p net_gwchoice=回车默认为当前网关, 请选择【1, 2, 3, 4, 5】:
if /i "!net_gwchoice!"=="q" goto end
if /i "!net_gwchoice!"=="5" goto ipset
if /i "!net_gwchoice!"=="4" goto set_gw
if /i "!net_gwchoice!"=="3" (set net_newgw=!net_often_gw3!
goto dnsset)
if /i "!net_gwchoice!"=="2" (set net_newgw=!net_often_gw2!
goto dnsset)
if /i "!net_gwchoice!"=="1" (set net_newgw=!net_often_gw1!
goto dnsset)
if /i "!net_gwchoice!"=="" (set net_newgw=!net_gw!
goto dnsset)
::输入无效时蜂鸣器发声3次
echo.
echo 无效的选择,请重新输入!
goto gwset
:set_gw
cls
echo.
echo 回车默认为当前网关【!net_gw!】
echo.
echo 请输入新的网关地址, 输入格式为【*.*.*.*】:
set net_newgw=
set /p net_newgw=
if /i "!net_newgw!"=="" set net_newgw=!net_gw!&goto dnsset
rem 以X替换输入的特殊字符开始
set "net_newgw=!net_newgw:|=X!"
set "net_newgw=!net_newgw:&=X!"
set "net_newgw=!net_newgw:<=X!"
set "net_newgw=!net_newgw:>=X!"
set "net_newgw=!net_newgw:"=X!"
set "net_newgw=!net_newgw:'=X!"
set "net_newgw=!net_newgw:(=X!"
set "net_newgw=!net_newgw:)=X!"
set "net_newgw=!net_newgw:%%=X!"
set "net_newgw=!net_newgw:@=X!"
set "net_newgw=!net_newgw:^=X!"
set "net_newgw=!net_newgw:`=X!"
::以NET做标记屏蔽用!!号输入的变量
set "net_newgw=!net_newgw:net=X!"
rem 以X替换输入的特殊字符结束
set "net_newgw=!net_newgw: =!"
set net_returnip=false
call :checkip !net_newgw!
if /i "!net_returnip!"=="false" echo.&echo 无效地址,请重新输入!&goto set_gw
set net_newgw=!net_returnip!
:dnsset
call :show
echo --------------------------DNS 设置--------------------------
echo.
echo (1) !net_often_dns1!DNS
echo.
echo (2) !net_often_dns2!DNS
echo.
echo (3) 设置新的DNS
echo.
echo (4) 返回上一步
echo.
echo --------------------------------------------------------------
echo (Q) 退出
echo --------------------------------------------------------------
echo.
echo 当前DNS为【!net_dns!】
echo.
set net_dnschoice=
set /p net_dnschoice=回车默认为当前DNS, 请选择【1, 2, 3, 4】:
if /i "!net_dnschoice!"=="q" goto end
if /i "!net_dnschoice!"=="4" goto gwset
if /i "!net_dnschoice!"=="3" goto set_dns1
if /i "!net_dnschoice!"=="2" (set net_newdns1=!net_often_dns2_pr! & set net_newdns2=!net_often_dns2_se!
goto public)
if /i "!net_dnschoice!"=="1" (set net_newdns1=!net_often_dns1_pr! & set net_newdns2=!net_often_dns1_se!
goto public)
if /i "!net_dnschoice!"=="" (set net_newdns1=!net_dns1! & set net_newdns2=!net_dns2!
goto public)
::输入无效时蜂鸣器发声3次
echo.
echo 无效的选择,请重新输入!
goto dnsset
:set_dns1
cls
echo.
echo 回车默认为当前首选DNS【!net_dns1!】
echo.
echo 请输入新的首选DNS地址, 输入格式为【*.*.*.*】:
set net_newdns1=
set /p net_newdns1=
if /i "!net_newdns1!"=="" set net_newdns1=!net_dns1!&goto set_dns2
rem 以X替换输入的特殊字符开始
set "net_newdns1=!net_newdns1:|=X!"
set "net_newdns1=!net_newdns1:&=X!"
set "net_newdns1=!net_newdns1:<=X!"
set "net_newdns1=!net_newdns1:>=X!"
set "net_newdns1=!net_newdns1:"=X!"
set "net_newdns1=!net_newdns1:'=X!"
set "net_newdns1=!net_newdns1:(=X!"
set "net_newdns1=!net_newdns1:)=X!"
set "net_newdns1=!net_newdns1:%%=X!"
set "net_newdns1=!net_newdns1:@=X!"
set "net_newdns1=!net_newdns1:^=X!"
set "net_newdns1=!net_newdns1:`=X!"
::以NET做标记屏蔽用!!号输入的变量
set "net_newdns1=!net_newdns1:net=X!"
rem 以X替换输入的特殊字符结束
set net_returnip=false
set "net_newdns1=!net_newdns1: =!"
call :checkip !net_newdns1!
if /i "!net_returnip!"=="false" echo.&echo 无效地址,请重新输入!&goto set_dns1
set net_newdns1=!net_returnip!
:set_dns2
cls
echo.
echo 回车默认为当前备用DNS【!net_dns2!】
echo.
echo 请输入新的备用DNS地址, 输入格式为【*.*.*.*】:
set net_newdns2=
set /p net_newdns2=
if /i "!net_newdns2!"=="" set net_newdns2=!net_dns2!&goto public
rem 以X替换输入的特殊字符开始
set "net_newdns2=!net_newdns2:|=X!"
set "net_newdns2=!net_newdns2:&=X!"
set "net_newdns2=!net_newdns2:<=X!"
set "net_newdns2=!net_newdns2:>=X!"
set "net_newdns2=!net_newdns2:"=X!"
set "net_newdns2=!net_newdns2:'=X!"
set "net_newdns2=!net_newdns2:(=X!"
set "net_newdns2=!net_newdns2:)=X!"
set "net_newdns2=!net_newdns2:%%=X!"
set "net_newdns2=!net_newdns2:@=X!"
set "net_newdns2=!net_newdns2:^=X!"
set "net_newdns2=!net_newdns2:`=X!"
::以NET做标记屏蔽用!!号输入的变量
set "net_newdns2=!net_newdns2:net=X!"
rem 以X替换输入的特殊字符结束
set net_returnip=false
set "net_newdns2=!net_newdns2: =!"
call :checkip !net_newdns2!
if /i "!net_returnip!"=="false" echo.&echo 无效地址,请重新输入!&goto set_dns2
set net_newdns2=!net_returnip!
:public
call :show
echo --------------------------------------------------------------
echo (Q) 退出
echo --------------------------------------------------------------
echo.
echo 即将更改【!net_nic!】网络设置,
echo.
echo Q键退出, 其他键确认...
set /p net_setchoice=
if /i "!net_setchoice!"=="q" goto end
echo.
echo 正在修改网络配置的IP、子网掩码、网关...
netsh interface ip set address !net_nic! static !net_newip! !net_mask! !net_newgw! !net_gm! > nul
echo.
echo 正在设置首选DNS服务器...
netsh interface ip set dns !net_nic! static !net_newdns1! primary > nul
echo.
echo 正在设置备用DNS服务器...
netsh interface ip add dns !net_nic! !net_newdns2! > nul
echo.
echo 正在清理本地DNS缓存...
ipconfig /flushdns > nul
::延时1秒左右
::ping -n 2 127.0.0.1 > nul
::设置成功蜂鸣器发声
echo
cls
echo.
echo 【!net_nic!】的设置已全部完成, 配置如下:
echo ---------------------------------------
::echo.
::echo MAC地址. . . . . :!net_newmac!
echo.
echo IP地址 . . . . . : !net_newip!
echo.
echo 默认网关 . . . . : !net_newgw!
echo.
echo 子网掩码 . . . . : !net_mask!
echo.
echo 首选DNS服务器. . : !net_newdns1!
echo.
echo 备用DNS服务器. . : !net_newdns2!
echo.
echo ---------------------------------------
echo.
echo 操作成功, 按任意键退出!
pause >nul
:end
exit
endlocal
goto :eof
:show
cls
echo.
echo ***当前设置*** ***目标设置***
::echo MAC地址. . . . . . : !net_mac! : !net_newmac!
echo IP地址 . . . . . . : !net_ip! : !net_newip!
echo 默认网关 . . . . . : !net_gw! : !net_newgw!
::echo 子网掩码 . . . . . : !net_mask! : !net_newmask!
echo 首选DNS服务器. . . : !net_dns1! : !net_newdns1!
echo 备用DNS服务器. . . : !net_dns2! : !net_newdns2!
echo.
goto :eof
:checkip
::特殊IP地址未做过滤
for /f "tokens=1,2,3,4 delims=." %%i in ("%1") do (
if "%%i"=="" goto :eof
if "%%j"=="" goto :eof
if "%%k"=="" goto :eof
if "%%l"=="" goto :eof
for /f "delims=1234567890" %%a in ("%%i%%j%%k%%l") do goto :eof
if %%i geq 255 goto :eof
if %%j geq 255 goto :eof
if %%k geq 255 goto :eof
if %%l geq 255 goto :eof
set net_returnip=%%i.%%j.%%k.%%l
)
goto :eof [ Last edited by suixing on 2010-2-9 at 10:44 ]
|