中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教一下:如何在使用PING命令以后,进行结果统计
作者:
标题: 请教一下:如何在使用PING命令以后,进行结果统计 上一主题 | 下一主题
justing
初级用户





积分 20
发帖 11
注册 2008-3-10
状态 离线
『楼 主』:  请教一下:如何在使用PING命令以后,进行结果统计

以下是我的一个小BAT命令
@echo off
echo ---------------------------------------------------------
echo ---=== PINGING b1
echo ---------------------------------------------------------
ping 10.66.183.1
echo ---------------------------------------------------------
echo ---=== PINGING b2
echo ---------------------------------------------------------
ping 10.66.183.2
echo ---------------------------------------------------------
echo ---=== PINGING b3
echo ---------------------------------------------------------
ping 10.66.183.3
echo ---------------------------------------------------------
echo ---=== PINGING b4
echo ---------------------------------------------------------
ping 10.66.183.4
echo ---------------------------------------------------------
echo ---=== PINGING b5
echo ---------------------------------------------------------
ping 10.66.183.5
pause

----
最后我希望能达到的效果是,
执行完以上几条PING命令,自动显示出比如“能PING通的IP有b1,b2(或者直接是IP),
不能PING通的IP有b3,b4,b5(或者直接是IP)"
因为是局域网内的PING,所以超时就是不通,收到包就通,我感觉是做个时间判断就行了,
不过小弟才疏学浅,不知道如何下手。。求教各位高手!

2010-11-16 13:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wewebb
初级用户





积分 66
发帖 53
注册 2009-10-9
状态 离线
『第 2 楼』:  


@echo off
Setlocal EnableDelayedExpansion
For /l %%a in (1,1,5) do (
echo ---------------------------------------------------------
echo ---=== 正在 PINGING B%%a ……
echo ---------------------------------------------------------
SET "IP=10.66.183.%%a"
ping !IP!  > NUl && SET "PASS=!PASS! !IP!" && echo 成功!!|| SET "NOT=!NOT! !IP!" && echo 失败!!
)
If "%PASS%" == "" set "PASS=0"
If "%NOT%" == "" set "NOT=0"
ECHO PING 通的 IP为:
Echo !PASS!   
Echo 不通的 IP为:
Echo !NOT!
pause


2010-11-16 15:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
justing
初级用户





积分 20
发帖 11
注册 2008-3-10
状态 离线
『第 3 楼』:  

非常感谢您的快速回复,我现在就试试!你真是个好人呐~

2010-11-16 17:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
justing
初级用户





积分 20
发帖 11
注册 2008-3-10
状态 离线
『第 4 楼』:  

不好意思啊。您的程序我用了,提示我“已经达到最大的Setlocal递归层”不知道怎么回事。。
我试着把(1,1,5)改成(1,5)以后,再运行,结果为
PING 通的 IP为:
0
不通的 IP为:
0
请按任意键继续. . .

[ Last edited by justing on 2010-11-16 at 17:28 ]

2010-11-16 17:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wewebb
初级用户





积分 66
发帖 53
注册 2009-10-9
状态 离线
『第 5 楼』:  



我在 XP 上使用正常的。

是否你的 批处理上还有其它代码呢?

你可以试试在 最后 的 Pause 上面加入一行
Endlocal

2010-11-16 17:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wewebb
初级用户





积分 66
发帖 53
注册 2009-10-9
状态 离线
『第 6 楼』:  

(1,1,5)  是个累加循环, 只要累加值不大于第三个参数就会循环下去。

%%a 的值会依次变成 1 2 3 4 5

改成 (1,5) 以后,实际会变成 (1,5,0)  累加值是 1+5=6 ,由于大于第三个参数 0 。所以 For 循环不会执行。

这样的批处理就会变样了的。

[ Last edited by wewebb on 2010-11-16 at 18:04 ]

2010-11-16 17:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wewebb
初级用户





积分 66
发帖 53
注册 2009-10-9
状态 离线
『第 7 楼』:  这是不用 Setlocal 的另一个写法。


@echo off
For /l %%a in (1,1,5) do (
echo ---------------------------------------------------------
echo ---=== 正在 PINGING B%%a ……
echo ---------------------------------------------------------
Call :process  10.66.183.%%a
)
If "%PASS%" == "" set "PASS=0"
If "%NOT%" == "" set "NOT=0"
echo.
ECHO PING 通的 IP为:
Echo  %PASS%   
Echo    不通的 IP为:
Echo %NOT%
pause >nul
goto :eof

:process
ping %1  > NUl && SET "PASS=%PASS% %1" && echo 成功!!|| SET "NOT=%NOT% %1" && echo 失败!!
goto :eof
[ Last edited by wewebb on 2010-11-16 at 18:20 ]

2010-11-16 18:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
justing
初级用户





积分 20
发帖 11
注册 2008-3-10
状态 离线
『第 8 楼』:  

谢谢wewebb朋友!真的很感谢你!
1,明天我先试试Endlocal
2,如果还不行,我再试试楼上你的另一种方法,好的话,我再来谢谢你

2010-11-16 22:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
justing
初级用户





积分 20
发帖 11
注册 2008-3-10
状态 离线
『第 9 楼』:  

我刚才用了两种方法,还是不行啊。
加上endlocal还是提示“已经达到最大的Setlocal递归层”
用第二种方法就显示
---------------------------------------------------------
---=== 正在 PINGING B1 ……
---------------------------------------------------------
然后一秒种以后就退出了

算了,我用自己那个方法也能用,只是想练练手用点高级的方法
我谢谢wewebb朋友,可能是我们单位机器有什么特殊吧,你的程序我感觉是对的!·

2010-11-17 10:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 10 楼』:  

下面的批处理可以ping 10.66.183.1---10.66.183.255如果想只ping到10.66.183.50就将255改成50,以此类推.
echo off
echo PING 通的 IP为:
For /l %%a in (1,1,255) do call :a 10.66.183.%%a
echo 能PING通的IP有%b%
echo 不能PING通的IP有%c%
pause>nul
exit
:a
echo 正在PING %1
ping %1 -w 50 -n 1 >nul &&set b=%b% %1||set c=%c% %1




我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2010-11-17 14:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: