中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助:用ping命令实现局域网内服务器监测的批处理
« [1] [2] »
作者:
标题: 求助:用ping命令实现局域网内服务器监测的批处理 上一主题 | 下一主题
fancyli622
初级用户





积分 22
发帖 10
注册 2008-9-21
状态 离线
『楼 主』:  求助:用ping命令实现局域网内服务器监测的批处理

刚学批处理没多久,对于BOSS的这个要求有点为难,请教各位了:

要求:
1)局域网内有40台服务器,要求用ping -l 10000相互连接,就是40*40对;
2)用得到的ping结果取出“Average”值,针对每台的话,应该有40个“Average”值;
3)对每台得到的40个“Average”值再进行求平均数得到一个“Average”值;
4)40台就有40个相互ping求出的“Average”值;
5)将得到的40个结果生成点状图,通过查看变化曲线以达到网络监测的目的。

(我的想法是在每台机器上跑一个批处理收集结果到一个机器上,再将40个结果导入到excel表中,再生成点状图。。。)

谢谢。。。

2008-9-21 13:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fancyli622
初级用户





积分 22
发帖 10
注册 2008-9-21
状态 离线
『第 2 楼』:  

或是大家有什么更好的主意,欢迎提出来:-)

2008-9-21 13:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 3 楼』:  

可以到这个帖子看看如何取ping的结果的“Average”值
http://www.cn-dos.net/forum/viewthread.php?tid=40395



2008-9-21 13:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fancyli622
初级用户





积分 22
发帖 10
注册 2008-9-21
状态 离线
『第 4 楼』:  

针对一台机器ping其它机器的时间中提取出"Average"我已经得到了,但是现在是要对得到的这40个"Average"时间求和并求平均值/40,请赐教下:
-------------------------------------------------------
@echo off

for /f %%i in (c:\build_pcs.txt) do ping -l 1000 %%i | find "Average =" >>e:\ping_Average_time.txt

for /f "tokens=4 delims==" %%i in (e:\ping_Average_time.txt) do @echo %%i
-------------------------------------------------------

以上得到的结果例如:

145ms
164ms
147ms
179ms
168ms

要如何求和,并算出平均数呢?

2008-9-21 14:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  


@echo off
set sum=0
for /f "delims=ms" %%a in (ping_Average_time.txt) do (
  set /a sum+=%%a
)
echo 平均值的和:%sum%
>"%temp%\MyDel.vbs" echo wscript.echo %sum%/40
for /f %%a in ('cscript /nologo "%temp%\MyDel.vbs"') do set div1=%%a
echo 平均值除以40的结果:%div1%
set /a div2=sum/40
echo 平均值整除40的结果:%div2%




2008-9-21 14:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fancyli622
初级用户





积分 22
发帖 10
注册 2008-9-21
状态 离线
『第 6 楼』:  

呵呵,,谢谢HAT的帮助,另外可否给予些注释,以便我这个初学者好理解下啊?
尤其以下两句啊?

>"%temp%\MyDel.vbs" echo wscript.echo %sum%/40
for /f %%a in ('cscript /nologo "%temp%\MyDel.vbs"') do set div1=%%a

2008-9-21 16:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  



  Quote:
>"%temp%\MyDel.vbs" echo wscript.echo %sum%/40

由于在批处理中的/表示整除,所有用上面的方法动态生成一个vbs文件来计算除法。

  Quote:
for /f %%a in ('cscript /nologo "%temp%\MyDel.vbs"') do set div1=%%a

在批处理中调用刚刚生成的那个vbs,把计算结果赋值给变量div1



2008-9-21 16:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fancyli622
初级用户





积分 22
发帖 10
注册 2008-9-21
状态 离线
『第 8 楼』:  

前4个要求OK了,但是要怎么自动生成点状图呢?
我的想法是:可否将结果导入到已经做好的Excel模板里,工作表2将工作表1得到的数据直接生成点状图?
现在得到了一个TXT文件如下例(但如果直接得到Excel文件的话则会放在同一个单元格里?):
----------------------------------------------------------
xty1UEA        2.186046512
xtyP61C        2.162790698
xtyP82C        2.023255814
xty1UDA        1.837209302
xtyPQ6C        1.465116279
xtyP84C        2.348837209
xtyPS7C        1.790697674
xtyPQ3C        1.372093023
xtyPQ2C        1.651162791
xtyPS9C        2.790697674
xtyPQ4C        1.395348837
xtyPQ5C        2.093023256
xtyPT0C        3.11627907
xtyPT1C        2.11627907
xtyPQ7C        1.627906977
xtyPT2C        1.88372093
xtyPR1C        2.418604651
xtyPT3C        1.976744186
xtyPR2C        2.302325581
xtyPT4C        1.906976744
xtyPT5C        2.395348837
xtyPR3C        2.302325581
xtyPR7C        3
xtyPT6C        1.627906977
xtyPR4C        2.906976744
xtyPT7C        2.069767442
xtyPT8C        2.093023256
xtyPR5C        2.441860465
xtyPR6C        2.372093023
xtyPT9C        2.023255814
xtyPU0C        2.279069767
xtyPS3C        1.953488372
xtyPS4C        2.302325581
--------------------------------------------------------------

2008-9-21 22:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fancyli622
初级用户





积分 22
发帖 10
注册 2008-9-21
状态 离线
『第 9 楼』:  

忘了,还有个估计是网络问题,本来应该有40台机器得,但是收集到的结果却少了几台?看了下这几台的脚本是可以跑的,但是结果并没有传到统一的地方来?
这是怎么回事呢?

2008-9-21 22:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  Re 8楼

把你的数据中间的空白替换成tab
打开Excel->数据->导入外部数据->......



2008-9-21 22:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  Re 9楼

你实际应用中的代码是怎样的?
你用什么方式把数据传到统一的地方来?



2008-9-21 22:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fancyli622
初级用户





积分 22
发帖 10
注册 2008-9-21
状态 离线
『第 12 楼』:  

不是有40台机器吗?我在每台机器上设置了计划任务运行以下bat文件:
-----------------------------------------
@echo off

if exist e:\ping_time.txt del /q e:\ping_time.txt
if exist e:\ping_Average_time.txt del /q e:\ping_Average_time.txt
if exist e:\ping_Average_time.xls del /q e:\ping_Average_time.xls

for /f %%i in (e:\build_pcs.txt) do ping -l 1000 %%i | find "Average =" >>e:\ping_time.txt

for /f "tokens=4 delims==" %%i in (e:\ping_time.txt) do @echo %%i >>e:\ping_Average_time.txt


set sum=0
for /f "delims=ms" %%a in (e:\ping_Average_time.txt) do (
  set /a sum+=%%a
)
echo 平均值的和:%sum%
REM*****由于在批处理中的/表示整除,所以动态生成一个vbs文件来计算除法。*****
>"%temp%\MyDel.vbs" echo wscript.echo %sum%/43
REM*****在批处理中调用刚刚生成的那个vbs,把计算结果赋值给变量div1 *****
for /f %%a in ('cscript /nologo "%temp%\MyDel.vbs"') do set div1=%%a
echo %Computername%  %div1% >>\\xtyPR3c\ping_Average_time.txt
--------------------------------------------------------------------

就把数据传到统一的地方来啊:-)
当然最后也可以导出为一个xls文件,但是到xls后不会分成两列,而是一列不好统计啊?就想用个自动点的方法,导出到一个xls文件,并自动分成两列,最好是导到一个已经做好的模板的工作表1中,这样做好的模板就可以自动在工作表2生成曲线图了:-)

2008-9-21 22:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fancyli622
初级用户





积分 22
发帖 10
注册 2008-9-21
状态 离线
『第 13 楼』:  

最后,还想反这个生成好的xls文件,自动发邮件给管理员?

2008-9-21 22:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 14 楼』:  Re 12楼

先在出问题的几台机器上修改一下代码的最后一句,不要直接把文件>>到xtyPR3c,而是>>到本机试试。至于在xls中分成两列,你把%Computername%和%div1%中间的空格换成制表符试试。



2008-9-21 23:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 15 楼』:  Re 13楼

可以调用VBS来发邮件,google一下吧,类似的代码随处可见。
Set cdo = CreateObject("CDO.Message")
strCfg = "http://schemas.microsoft.com/cdo/configuration/"
With cdo
  .Sender = "发送者邮件地址"
  .From = "发送者邮件地址"
  .To = "接收者邮件地址"
  .Fields("urn:schemas:mailheader:X-Priority") = 1
  .Fields.Update
  .Subject = "邮件标题"
  .TextBody = "邮件内容"
  .Configuration(strCfg & "SendUsing") = 2
  .Configuration(strCfg & "smtpserver") = "发送邮件服务器地址"
  .Configuration.Fields.Update
  .Send
End With
如果需要发送附件,可以参考这个帖子:
http://www.cn-dos.net/forum/viewthread.php?tid=29873

[ Last edited by HAT on 2008-11-6 at 00:56 ]



2008-9-21 23:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: