中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 19:52
48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » For 循环得不到想要的结果,该怎么办!!!
可打印版本  738 / 2
第1楼 XinStar 发表于 2008-03-15 00:53
初级用户 发帖 11 积分 30
For 循环得不到想要的结果,该怎么办!!!
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楼 Climbing 发表于 2008-03-15 11:12
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
用一条嵌套这么多层的for语句来实现这个功能,似乎是有点过于复杂了,程序写来一方面是实现某个功能,另一方面就是让人来看的。所以,无论从哪个解决来说,这个for语句都有点儿过于复杂。总之,算法还是有问题。建议楼主认真考虑一下测试一个服务器能否连接的算法是不是可以简化一些。

for语句对文件的每一行是循环执行的,其执行中间除非使用了goto这一类的语句转到别的位置,否则每一行都要执行一次同样的操作,所以,你可以考虑在那个语句中将goto nolink改为goto havelink。
第3楼 XinStar 发表于 2008-03-15 13:51
初级用户 发帖 11 积分 30
谢谢Climbing兄,我正在想办法把语句写的更简化些!!!
但就是不知道能不能达到效果,,,挻郁闷的!!!

非常感谢你哈!!!

[ Last edited by XinStar on 2008-3-15 at 03:54 PM ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023