Windows的网络配置的批处理脚本

  做了好多年的Linux的系统管理,写了很多次的bash脚本处理一些指定的事件。今天接到了一个小任务,在windows下做一个根据配置文件来配置网络的小程序。做这种配置工作在linux中最简单的方式就是用bash,惯性思维,我想到了批处理。由于以前基本没有认真的使用过批处理来执行某一个特定任务,因而在此次过程当中。我发现真的很麻烦,最主要原因有两个,可以辅助的工具太少了,还有就是脚本语言的能力太弱了。 辅助工具少,我的感受就是字处理和文本能力比较差,我想解析一个文件找不到很好的工具来辅助。不想linux至少我可以用grep,好一点我还可以用cut、awk等等。语言能力差,我觉得就是他连最基本的作用域的概念都不支持,所有的if和for之类的逻辑处理关键字后面的逻辑处理都只支持一个命令的执行。太让我失望了,这次的初探也许是我最后的使用,我觉得如果希望解决一个复杂点的任务,在windows下还不如使用c语言编程的方法实现呢。

  好了,言归正传,说说我的任务和脚本吧。我的任务就是根据一个配置文件来完成网络配置,配置文件中的mac地址是关键值,它所对应的ip地址必须配置到系统中具有这个mac地址的相应网络接口上

 

脚本如下:

1  192.168.0.252 00-16-D3-93-04-AB
1.1  192.168.22.252 00-16-D3-93-04-AB

 

1.1代表的是在第一块网卡上增加绑定的第二个IP地址。以此类推如果使用的是不带点的ID标识(如1),就是此网卡只有一个IP地址,否则(如1.1)就是有不止一个IP地址。

 

::获取所有的网络接口名称以及对应的mac地址到一个文件中

ipconfig /all >>c:/ip.tmp

find "Ethernet adapter" c:/ip.tmp >c:/a.tmp
find "Physical Address" c:/ip.tmp >c:/b.tmp

for /F "skip=2 tokens=1 delims=:" %%M in (c:/a.tmp) do (
set ip=%%M
goto a1
)
:a1
for /F "tokens=3" %%M in ("%ip%") do set ip1_1=%%M


for /F "skip=3 tokens=1 delims=:" %%M in (c:/a.tmp) do (
set ip=%%M
goto a2
)
:a2
for /F "tokens=3" %%M in ("%ip%") do set ip1_2=%%M

for /F "skip=4 tokens=1 delims=:" %%M in (c:/a.tmp) do (
set ip=%%M
goto a3
)
:a3
for /F "tokens=3" %%M in ("%ip%") do set ip1_3=%%M


for /F "skip=2 tokens=2 delims=:" %%M in (c:/b.tmp) do (
set ip=%%M
goto a1
)
:a1
set ip2_1=%ip%

for /F "skip=3 tokens=2 delims=:" %%M in (c:/b.tmp) do (
set ip=%%M
goto a2
)
:a2
set ip2_2=%ip%

for /F "skip=4 tokens=2 delims=:" %%M in (c:/b.tmp) do (
set ip=%%M
goto a3
)
:a3
set ip2_3=%ip%


echo %ip1_1% %ip2_1% >> c:/temp.out
echo %ip1_2% %ip2_2% >> c:/temp.out
echo %ip1_3% %ip2_3% >> c:/temp.out

 

:::此处生成的c:/temp.out文件最多包括三个网络接口

此文件如下

本地连接  00-16-D3-93-04-AB
无线网络连接  00-19-D2-7F-8E-34
无线网络连接  00-19-D2-7F-8E-34

 

 

::根据上述生成的中间文件,以及最上面提到的配置文件来进行配置网络接口的ip地址网关等信息。

for /F "skip=1 tokens=1,2,3 delims= " %%M in (c:/windows.cfg) do (
set id=%%M
set ip=%%N
set mac=%%O
goto b11
)

:b11
(
find "%mac%" c:/temp.out >c:/m.tmp
goto b12
)

:b12
for /F "skip=2 tokens=1 delims= " %%M in (c:/m.tmp) do (
 if %id%==1.1 (
 echo netsh interface ip add address "%%M"  addr=%ip% mask=%netmask% gateway=%gateway% gwmetric=2 >nul
 )
 if not %id%==1.1 (
 echo netsh interface ip set address "%%M" source=static addr=%ip% mask=%netmask% gateway=%gateway% gwmetric=0 >nul
 )
 del c:/m.tmp
 )
 
for /F "skip=2 tokens=1,2,3 delims= " %%M in (c:/windows.cfg) do (
set id=%%M
set ip=%%N
set mac=%%O
goto b21
)

:b21
(
find "%mac%" c:/temp.out >c:/m.tmp
goto b22
)

:b22
for /F "skip=2 tokens=1 delims= " %%M in (c:/m.tmp) do (
 if %id%==1.1 (
 echo netsh interface ip add address "%%M"  addr=%ip% mask=%netmask% gateway=%gateway% gwmetric=2 >nul
 )
 if not %id%==1.1 (
 echo netsh interface ip set address "%%M" source=static addr=%ip% mask=%netmask% gateway=%gateway% gwmetric=0 >nul
 )
 del c:/m.tmp
 )
 
for /F "skip=3 tokens=1,2,3 delims= " %%M in (c:/windows.cfg) do (
set id=%%M
set ip=%%N
set mac=%%O
goto b31
)

:b31
(
find "%mac%" c:/temp.out >c:/m.tmp
goto b32
)

:b32
for /F "skip=2 tokens=1 delims= " %%M in (c:/m.tmp) do (
 if %id%==1.1 (
 echo netsh interface ip add address "%%M"  addr=%ip% mask=%netmask% gateway=%gateway% gwmetric=2 >nul
 )
 if not %id%==1.1 (
 echo netsh interface ip set address "%%M" source=static addr=%ip% mask=%netmask% gateway=%gateway% gwmetric=0 >nul
 )
 del c:/m.tmp
 )
 
for /F "skip=4 tokens=1,2,3 delims= " %%M in (c:/windows.cfg) do (
set id=%%M
set ip=%%N
set mac=%%O
goto b41
)

:b41
(
find "%mac%" c:/temp.out >c:/m.tmp
goto b42
)

:b42
for /F "skip=2 tokens=1 delims= " %%M in (c:/m.tmp) do (
 if %id%==1.1 (
 echo netsh interface ip add address "%%M"  addr=%ip% mask=%netmask% gateway=%gateway% gwmetric=2 >nul
 )
 if not %id%==1.1 (
 echo netsh interface ip set address "%%M" source=static addr=%ip% mask=%netmask% gateway=%gateway% gwmetric=0 >nul
 )
 del c:/m.tmp
 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值