需求:
自定义一个自己的ping命令来查询网吧网络是否正常。把ping结果里面的信息替换成自定义的信息。利用网吧批处理查询当前时间100秒内的网吧网络(外网/内网)目前是否卡顿,网络是否正常,有没掉包的现象。
需求分析:
这个目前比较常用的方式是使用ping命令来执行。当然你也可以借助第三方支持命令行的工具来完成这个需求。ping命令支持的参数有哪些,找出我们需求里面要用到的需求。要能满足100秒的需求,那么我ping /?一下(有个技巧,windows系统自带的命令,基本都支持/?的参数来查询参数)
PS C:\Users\Administrator> ping /? 用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p] [-4] [-6] target_name 选项: -t Ping 指定的主机,直到停止。 若要查看统计信息并继续操作,请键入 Ctrl+Break; 若要停止,请键入 Ctrl+C。 -a 将地址解析为主机名。 -n count 要发送的回显请求数。 -l size 发送缓冲区大小。 -f 在数据包中设置“不分段”标记(仅适用于 IPv4)。 -i TTL 生存时间。 -v TOS 服务类型(仅适用于 IPv4。该设置已被弃用, 对 IP 标头中的服务类型字段没有任何 影响)。 -r count 记录计数跃点的路由(仅适用于 IPv4)。 -s count 计数跃点的时间戳(仅适用于 IPv4)。 -j host-list 与主机列表一起使用的松散源路由(仅适用于 IPv4)。 -k host-list 与主机列表一起使用的严格源路由(仅适用于 IPv4)。 -w timeout 等待每次回复的超时时间(毫秒)。 -R 同样使用路由标头测试反向路由(仅适用于 IPv6)。 根据 RFC 5095,已弃用此路由标头。 如果使用此标头,某些系统可能丢弃 回显请求。 -S srcaddr 要使用的源地址。 -c compartment 路由隔离舱标识符。 -p Ping Hyper-V 网络虚拟化提供程序地址。 -4 强制使用 IPv4。 -6 强制使用 IPv6。100秒的话,咱们可以用-n 100设置回显数为100条。
编码:
通过需求分析后,开始编码,完整批处理代码如下:
@echo off color f2 echo. set for=于 set of=的 set with=用 set in=(以 set data:=数据 set milli-seconds:=毫秒为单位) set Approximate=大约 set 时间=耗费时间 set round=来回 set TTL=延迟 set 的回复:=马斯克的回答, set 来自=天下网咖正在呼叫来自火星 set 字节=数据包大小 set time=时间: set timed=时间 set out=超过 set statistics=统计 set Packets:=包: set Sent=已发送= set Received=已收到= set Lost=已丢失= set loss)=丢失) set Minimum=最小值= set Maximum=最大值= set Average=平均值= set TTL=TTL= setlocal enabledelayedexpansion set a= set/p a=请输入要ping的网址或IP echo 正在查询,请稍候... for /f "delims=" %%i in ('ping %a% -n 100') do ( set ret= for %%a in (%%i) do if defined %%a (set ret=!ret!!%%a!) else set ret=!ret! %%a if not "!ret!"=="" (set ret=!ret:time=时间! && echo !ret!) else echo. ) pause>nul
代码分析:
使用setlocal enabledelayedexpansion来实现变量值延迟的功能是本代码的核心功能,其他的就是替换ping结果字符串的功能。另外需要用到for循环进行每一行结果值里面的字符串的替换。
执行结果截图:
总结:
本代码编码学习价值大于批处理的实际用途,大家在使用时可以直接把里面的用户输入的IP变成自己的固定的网吧DNS的IP,这样不需要输入IP,直接运行批处理,稍等下就能看到结果。
本代码需要学习的是批处理编程的思维。分享出来就是借花献佛让大家举一反三的思考,写出更实用的网维批处理!