自动Ping脚本的编写要点

来源:互联网 发布:淘宝联盟平台电脑版 编辑:程序博客网 时间:2024/05/29 17:30

 因为工作关系,最近需要每天对干线网络进行连通性及时延测试,执行大量的ping命令,还要记住大量的IP地址。

于是设计了一个NetTest.cmd命令行脚本。

主要过程及代码如下:

 

第一步:获取本机地址。

代码如下


::获取本机的IP地址
@if exist %TEMPFILE% del %TEMPFILE%
@ipconfig | find "IP Address" > %TEMPFILE%
:: 判断是否生成了有效的%TEMPFILE%文件
@CALL :SubGetFileSize %TEMPFILE%
@if %FileSize% LEQ 10 (
    @ECHO 网线没有连接或者交换机没有开机,不能进行测试。
 @goto ExitPing
)
::
::@for /F "skip=7 tokens=15,*" %%I in (%TEMPFILE%) do (
@for /F "tokens=15,*" %%I in (%TEMPFILE%) do (
 @set LocalAddr=%%I
 @goto :GetAddrRouterFlag
)
::@ECHO LocalAddr=%LocalAddr%

 


 

第二步:进行本机地址识别

 


 

::识别地址集
:GetAddrRouterFlag
@for /F "delims=. tokens=1" %%I in ("%LocalAddr%") do (
 @set /A AddrHead=%%I
 @set /A AddrRouterFlag=%%I/64
 @goto :StartTest
)
:StartTest
@if  %AddrRouterFlag% EQU 0 goto :StartR1Test
@if  %AddrRouterFlag% EQU 1 goto :StartR2Test
@if  %AddrRouterFlag% EQU 2 goto :StartR3Test
@if  %AddrRouterFlag% EQU 3 goto :StartR4Test
@if  %AddrRouterFlag% EQU 4 goto :StartR5Test
@goto :ExitPing

 


 

第三步:处理对目标地址集的测试

 


 

:StartR1Test
@ECHO 启动到所有站点的主用路由网络连通性测试...
::Center1(1.x.x.x)
@if NOT %AddrHead% EQU 1 start cmd.exe /K "title [router1-到Center01核心交换机WAN接口-11.132.10.20]&& echo 开始测试时间%TIME% && ping 1.32.0.20 %PINGOPTIONS%"

......
@goto :ExitPing

 

:StartR2Test
@ECHO 启动到所有站点的备用路由2网络连通性测试...
::Center1(65.x.x.x)
@if NOT %AddrHead% EQU 65 start cmd.exe /K "title [router2-到Center01接入交换机UPLink接口-65.132.10.20]&& echo 开始测试时间%TIME% && ping 65.132.10.20 %PINGOPTIONS%"
......

@goto ExitPing

 

....................................

 

:: *********************************************************************************
:: 子过程01 - GetFileSize
:: SubGetFileSize <<<
:SubGetFileSize
@set /A FileSize=%~z1
::@ECHO 文件%~nx1的大小为%FileSize%字节。
@goto :EOF
:: >>> SubGetFileSize

 

:ExitPing
@ECHO.
@PAUSE
@ECHO ON && endlocal

 


 

其中,脚本内函数为

:: 子过程01 - GetFileSize
:: SubGetFileSize <<<
:SubGetFileSize
@set /A FileSize=%~z1
::@ECHO 文件%~nx1的大小为%FileSize%字节。
@goto :EOF
:: >>> SubGetFileSize

 


 

重点代码分析

 

start cmd.exe /K "title [router1-到Center01核心交换机WAN接口-11.132.10.20]&& echo 开始测试时间%TIME% && ping 11.132.10.20 %PINGOPTIONS%"

该语句包含start->cmd->title/echo/ping三层调用关系。其中start用来启动新的控制台窗口Win;cmd /k用来保证Win窗口在按Ctrl+C结束脚本后保持在当前窗口中,并解释执行后面的命令;title/echo/ping是依次执行的三个命令,分别设置Win窗口的标题,显示测试开始时间,进行ping测试。

特别要注意的是,

第一:title后面的[]括起来的是Win窗口的标题,而外部的“”括起来的是cmd要执行的脚本,这里是嵌套的脚本。

第二:start 可以带窗口title启动新的命令提示符窗口,但新窗口将自动采用windows官方默认的属性设置(高度、宽度、颜色等),所以,这里必须是在cmd中进行窗口title的设置。

*********************************

在下一篇《一键式Ping脚本 》中给出了一个完整的例子。


 

原创粉丝点击