中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【原创】我的更改网络IP、网关、DNS批处理源码
作者:
标题: 【原创】我的更改网络IP、网关、DNS批处理源码 上一主题 | 下一主题
suixing
新手上路





积分 3
发帖 2
注册 2008-11-12
状态 离线
『楼 主』:  【原创】我的更改网络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 ]

2010-2-4 13:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
niubaty
新手上路





积分 2
发帖 2
注册 2010-1-23
状态 离线
『第 2 楼』:  

hehe

2010-2-4 15:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ldr2zjj
初级用户





积分 167
发帖 95
注册 2007-5-6
状态 离线
『第 3 楼』:  

非常牛,学习下~~~~~~~

2010-2-4 16:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: