最近奔波与宿舍与图书馆之间,有时还要用校园网。每次到了图书馆都要设置网络参数,回寝室后又得重新设置回来,烦了。装个软件吧,又闲麻烦,于是自己动手写了个批处理文件,完成这个简单的网络转换功能。由于之前对批处理了解的不多(相比Linux的Shell编程功能就太弱了),查了一天的资料才终于搞定了下面的一小段代码,只需要将代码复制粘贴到本机,另存为一个bat文件即可。程序需要读取一个config.cfg文件,里面每一行配置一个上网位置的参数
格式如: 地点 IP地址 网关 DNS服务器
注意:
- 由于此配置文件以空格分隔各参数,所以地点要顶头,而且中间不能有空格
- 注意IP地址,网关,DNS服务器中的“.”一定要是英文字符的点,否则设置不成功
- 第一次运行bat时会自动创建一个配置文件,只需要修改这个文件即可。
下面是bat文件的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
::Author Winbomb(hello-_-world@163.com)
::Last Modification: 2009-03-26
@echo off
setlocal EnableDelayedExpansion
set linkname="本地连接"
set cfgfile=config.cfg
set line=0
set blank=
::判断cfgfile是否存在
if not exist %cfgfile% (
@echo 配置文件%cfgfile%不存在,将为您创建一个默认的配置文件
@echo default 192.168.1.18 192.168.1.1 202.103.24.68 >> %cfgfile%
)
@echo.
@echo --------------------------------------------------------------------------------
@echo 本命令将设置%linkname%为以下内容:
@echo.
for /f "tokens=1-4 delims= " %%j in (%cfgfile%) do (
set /a line+=1
::这段代码使得位置的值长度相同
set pos=%%j▁▁▁▁▁▁▁▁▁▁▁▁
set pos=!pos:~0,5!
set pos=!pos:▁= !
set ip=%%k%blank%
set gate=%%l%blank%
set dns=%%m%blank%
@echo [!line!] 地点:!pos! IP:!ip:~0,15!网关:!gate:~0,15!DNS:!dns:~0,15!
@echo.
)
@echo.
@echo 注意:可以在%cfgfile%中设置上述要填充的信息!
@echo --------------------------------------------------------------------------------
set/p choice=请选择要设置的位置(回车设置为自动获取,0放弃设置):
if "%choice%" == "" goto FINISH_CONFIG
if "%choice%" == "0" exit
set line=0
for /f "tokens=1-4 delims= " %%j in (%cfgfile%) do (
set /a line+=1
if "%choice%" == "!line!" (
set POS=%%j
set IP=%%k
set GATE=%%l
set DNS=%%m
set config=true
goto FINISH_CONFIG
)
)
:FINISH_CONFIG
@echo.
::根据选定的参数设置网咯
if "%config%" == "true" (
@echo 正在为您设置IP地址:%IP% 和网关:%GATE% , 请稍候...
@echo.
netsh interface ip set address name=%linkname% source=static addr=%IP% mask=255.255.255.0 gateway=%GATE% l
@echo 正在为您设置DNS服务器:%DNS%,请稍候...
@echo.
netsh interface ip set dns name=%linkname% source=static addr=%DNS%
@echo 设置完成!
)
::设置为DHCP模式
if not "%config%" == "true" (
@echo 将网络设置为自动获取模式:DHCP ,请稍候...
@echo.
netsh interface ip set address name=%linkname% source=dhcp
@echo 设置DNS服务器为自动获取模式,请稍候...
@echo.
netsh interface ip set dns name=%linkname% source=dhcp
@echo 设置完成!
)
@echo.
@pause
|
参考:
- 批处理命令详解 http://www.boofee.net/bigfee/read.php?94
- FOR参数F选项delims与tokens http://hi.baidu.com/cjiabing/blog/item/728f2238c7412423b9998f65.html
- SET用法 http://hi.baidu.com/1112yuhua/blog/item/bbbacb258783e06234a80f9d.html
- ECHO格式化输出 http://bbs.cmfchina.com/space/?uid-298225-action-viewspace-itemid-247
- 延迟变量(!!起来的变量) http://qzone.qq.com/blog/82635313-1218590333
- netsh命令 http://28653.blog.51cto.com/18653/92119
说明:
- 上述的红色标记的代码可能会让你感觉不知道是干什么的,其实这些代码是为了显示出来整齐,即格式化输出而用的,详见 批处理中如何格式化输出中文字符
- 如果你有修改过默认为“本地连接”的这个网卡的连接名称,可以通过修改linkname变量的值来指定连接的名称。同样也可以通过修改cfgfile变量来修改配置文件的名称。
下图为运行的效果:

后继处理:可以添加一个快捷方式到快速启动栏,并把图标改为你喜欢的图标(我觉得dos的那个图标太丑了,很不爽),这样需要修改网络连接时只需要点击一下这个图标,选择一个要设置的地点就可以了,是不是很爽啊。我电脑里面是这样的:
