中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 20:49
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 看不懂这段不断ping对方的代码 查看 1,179 回复 5
楼 主 看不懂这段不断ping对方的代码 发表于 2009-12-05 14:38 ·  中国 山东 青岛 联通
新手上路
积分 14
发帖 10
注册 2009-12-01 21:49
16年会员
UID 155758
性别 男
状态 离线
@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



哪位高手能详细解释下
2 发表于 2009-12-07 21:41 ·  中国 江西 吉安 电信
中级用户
★★
积分 253
发帖 112
注册 2006-05-31 11:12
20年会员
UID 56308
性别 男
状态 离线
我来试一下,不过我表达能力不够强,估计你直接看代码比看我解释都强 !-_-!

@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%,并继续循环。
3 发表于 2009-12-09 14:35 ·  中国 山东 青岛 联通
新手上路
积分 14
发帖 10
注册 2009-12-01 21:49
16年会员
UID 155758
性别 男
状态 离线
懂了 讲解的非常详细

非常感谢!!!
4 发表于 2009-12-09 14:58 ·  中国 山东 青岛 联通
新手上路
积分 14
发帖 10
注册 2009-12-01 21:49
16年会员
UID 155758
性别 男
状态 离线
但是又有新的问题了
这段代码不管用啊

不管对方在不在线,都是一样的结果(我在局域网内试了好几个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 ]
5 发表于 2009-12-10 14:53 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
把你出错的代码贴出来,一楼的代码经测试,没有这个问题
6 发表于 2009-12-11 16:42 ·  中国 山东 青岛 联通
新手上路
积分 14
发帖 10
注册 2009-12-01 21:49
16年会员
UID 155758
性别 男
状态 离线
@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 递归层。



你测试没问题???我的咋有问题啊!!!请指点!!!
论坛跳转: