中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-23 04:35
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » For 循环得不到想要的结果,该怎么办!!! 查看 704 回复 2
楼 主 For 循环得不到想要的结果,该怎么办!!! 发表于 2008-03-15 00:53 ·  中国 湖南 张家界 电信
初级用户
积分 30
发帖 11
注册 2007-06-30 16:52
18年会员
UID 92780
性别 男
状态 离线
Online.ini文件内容如下:
ZjjHs1.3322.Org 5500
ZjjHs2.3322.Org 6500

有如下语句:
For /f "Tokens=1" %%h in (Online.ini) Do For /f "Tokens=8" %%i in ('Tracert %%h') do For /f "Tokens=4" %%j in ('Netstat -n -p tcp ^| FindStr /ir "%%i"') do If Not "%%l"=="ESTABLISHED" Goto NoLink

:NoLink
Cls
Color 7c
Echo.&Echo.
Echo     连接失败!请检查网络或通知远程协助人员...
Goto End

若第一个服务器可连接,而第二个服务器无法连接,程序还是会跳转到NoLink去;

想要达到的效果:
当第一个服务器无法连接时,尝试第二个服务器,如果第二个服务器也无法连接则跳转到NoLink上;
当第一个服务器可以连接时,直接跳出For循环语句,不再测试连接第二个服务器.

忘高手指点...

[ Last edited by XinStar on 2008-3-15 at 02:11 AM ]
2 发表于 2008-03-15 11:12 ·  中国 河北 保定 移动
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
用一条嵌套这么多层的for语句来实现这个功能,似乎是有点过于复杂了,程序写来一方面是实现某个功能,另一方面就是让人来看的。所以,无论从哪个解决来说,这个for语句都有点儿过于复杂。总之,算法还是有问题。建议楼主认真考虑一下测试一个服务器能否连接的算法是不是可以简化一些。

for语句对文件的每一行是循环执行的,其执行中间除非使用了goto这一类的语句转到别的位置,否则每一行都要执行一次同样的操作,所以,你可以考虑在那个语句中将goto nolink改为goto havelink。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
3 发表于 2008-03-15 13:51 ·  中国 湖南 张家界 电信
初级用户
积分 30
发帖 11
注册 2007-06-30 16:52
18年会员
UID 92780
性别 男
状态 离线
谢谢Climbing兄,我正在想办法把语句写的更简化些!!!
但就是不知道能不能达到效果,,,挻郁闷的!!!

非常感谢你哈!!!

[ Last edited by XinStar on 2008-3-15 at 03:54 PM ]
论坛跳转: