最近奔波与宿舍与图书馆之间,有时还要用校园网。每次到了图书馆都要设置网络参数,回寝室后又得重新设置回来,烦了。装个软件吧,又闲麻烦,于是自己动手写了个批处理文件,完成这个简单的网络转换功能。由于之前对批处理了解的不多(相比Linux的Shell编程功能就太弱了),查了一天的资料才终于搞定了下面的一小段代码,只需要将代码复制粘贴到本机,另存为一个bat文件即可。程序需要读取一个config.cfg文件,里面每一行配置一个上网位置的参数

格式如: 地点 IP地址 网关 DNS服务器

注意:

  1. 由于此配置文件以空格分隔各参数,所以地点要顶头,而且中间不能有空格
  2. 注意IP地址,网关,DNS服务器中的“.”一定要是英文字符的点,否则设置不成功
  3. 第一次运行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

参考:

  1. 批处理命令详解 http://www.boofee.net/bigfee/read.php?94
  2. FOR参数F选项delims与tokens http://hi.baidu.com/cjiabing/blog/item/728f2238c7412423b9998f65.html
  3. SET用法 http://hi.baidu.com/1112yuhua/blog/item/bbbacb258783e06234a80f9d.html
  4. ECHO格式化输出 http://bbs.cmfchina.com/space/?uid-298225-action-viewspace-itemid-247
  5. 延迟变量(!!起来的变量) http://qzone.qq.com/blog/82635313-1218590333
  6. netsh命令 http://28653.blog.51cto.com/18653/92119

说明:

  1. 上述的红色标记的代码可能会让你感觉不知道是干什么的,其实这些代码是为了显示出来整齐,即格式化输出而用的,详见 批处理中如何格式化输出中文字符
  2. 如果你有修改过默认为“本地连接”的这个网卡的连接名称,可以通过修改linkname变量的值来指定连接的名称。同样也可以通过修改cfgfile变量来修改配置文件的名称。

下图为运行的效果:

image-20210507185544979

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

image-20210507185629287