中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 看不懂这段不断ping对方的代码
作者:
标题: 看不懂这段不断ping对方的代码 上一主题 | 下一主题
kevinm
新手上路





积分 14
发帖 10
注册 2009-12-1
状态 离线
『楼 主』:  看不懂这段不断ping对方的代码

@echo off&setlocal enabledelayedexpansion

set "#0=在线"&set "#1=离线"

:lp

set /a _0=0,_1=0

for /l %%a in (1,1,2) do (

    ping /n 1 http://www.baidu.com/>nul

    set /a _!errorlevel!+=1

)

for %%a in (0 1) do if !_%%a! equ 2 set "str=!#%%a!:%time%"&goto next

goto lp

:next

echo %str%&goto lp



哪位高手能详细解释下

2009-12-5 14:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junyee
中级用户




积分 253
发帖 112
注册 2006-5-31
状态 离线
『第 2 楼』:  

我来试一下,不过我表达能力不够强,估计你直接看代码比看我解释都强 !-_-!

@echo off&setlocal enabledelayedexpansion
REM 清除回显并启用变量延迟扩展

set "#0=在线"&set "#1=离线"
REM 设置两个字符串变量

:lp
REM 循环标志

set /a _0=0,_1=0
REM 设置两个变量_0;_1的初始值为0

for /l %%a in (1,1,2) do (
REM 连续运行两次括号内的命令
    ping /n 1 http://www.baidu.com/>nul
REM PING www.baidu.com 一次,并不显示所有信息
    set /a _!errorlevel!+=1
REM 根据PING的返回码(拼成功为0,不成功为1),设置_0或_1的值为原来值+1
)

for %%a in (0 1) do if !_%%a! equ 2 set "str=!#%%a!:%time%"&goto next
REM 分别判断变量 _0 和 _1的值,如果为2 则把对应的字符串(内容为#0/#1+:+系统时间)发送到变量str ,并跳转到标签 :next

goto lp
如果_0或_1变量值不为2,则直接跳回标签 :lp

:next
REM 仅由上一个for跳转到这里

echo %str%&goto lp
显示 变量str的值,并继续跳到循环 :lp

————————————————————

综上
此BAT的作用是:
连续PING两次www.baidu.com,如果PING得通则会把 变量 _0设置为2,_1为0,反之把 变量_1设置为2,_0为0.
分别判断_0和_1的值
如果_0为2,则显示在线:%TIME%,并继续循环,
如果_1为2,则显示离线:%TIME%,并继续循环。

2009-12-7 21:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kevinm
新手上路





积分 14
发帖 10
注册 2009-12-1
状态 离线
『第 3 楼』:  

懂了  讲解的非常详细  

非常感谢!!!

2009-12-9 14:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kevinm
新手上路





积分 14
发帖 10
注册 2009-12-1
状态 离线
『第 4 楼』:  

但是又有新的问题了  
这段代码不管用啊   

不管对方在不在线,都是一样的结果(我在局域网内试了好几个IP了)

已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。


为啥呢?是代码本身不足还是别的原因?希望高手指点

[ Last edited by kevinm on 2009-12-9 at 15:00 ]

2009-12-9 14:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 5 楼』:  

把你出错的代码贴出来,一楼的代码经测试,没有这个问题



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-12-10 14:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kevinm
新手上路





积分 14
发帖 10
注册 2009-12-1
状态 离线
『第 6 楼』:  

@echo off&setlocal enabledelayedexpansion

set "#0=在线"&set "#1=离线"

:lp

set /a _0=0,_1=0

for /l %%a in (1,1,2) do (

    ping /n 1 http://www.baidu.com/>nul

    set /a _!errorlevel!+=1

)

for %%a in (0 1) do if !_%%a! equ 2 set "str=!#%%a!:%time%"&goto next

goto lp

:next

echo %str%&goto lp




上面就是代码 ,就是1楼的代码啊

出错提示:

已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。
已经达到最大的 setlocal 递归层。



你测试没问题???我的咋有问题啊!!!请指点!!!

2009-12-11 16:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: