标题: [代码合集] 批处理for循环嵌套中goto:eof无法跳出子循环 [打印本页]
作者: nf99290 时间: 2010-7-27 16:56 标题: 批处理for循环嵌套中goto:eof无法跳出子循环
目的:
for条件不满足,跳到子for,子for最多执行5次,假如第2次符合,就跳出子for继续执行上层的循环;5次都不满足,结束批处理。
当前问题是:到了子循环,条件已经满足了,子循环还是会执行完5次,而不会goto :eof跳出子循环继续执行上层循环,不知道要怎么弄了。
注:条件限制不能使用if做判断,只能使用&& ||方式。-
- cls
- for /f "eol=# tokens=1 delims= " %%i in (test.txt) do (
- echo %%i|findstr "\<1\>" &&echo ok||call:111
- )
- :111
- for /l %%a in (1,1,5) do (
- echo %%i|findstr "\<2\>" &&goto :eof||exit
- )
复制代码
test.txt文件内容为复制代码
[ 本帖最后由 nf99290 于 2010-7-27 22:17 编辑 ]
作者: caruko 时间: 2010-7-27 17:55
建议..
给FOR 加一个 IF 判断,条件满足就 执行后面的 代码,不满足 就goto :eof
循环次数不变,但是执行的次数变了。
goto 跳出for是中断,某些情况下是可以,但是很多情况下不好用,特别是嵌套的时候可能跳出全部FOR。
另外,个人觉得如果要嵌套循环,并且需要跳出单个循环的时候,用call + exit /b 来做。
exit /b 是退出子脚本,并且可以设置返回值,对call 适用。
[ 本帖最后由 caruko 于 2010-7-27 18:01 编辑 ]
作者: caruko 时间: 2010-7-27 18:15
你的脚本很奇怪,找到1就OK;找到2就继续循环,否者就退出?
但是查找2,一次就出结果了,怎么要循环5次?你这5次是一个效果。
作者: netbenton 时间: 2010-7-27 19:35
使用 “&& || ”来代替if “!errorlevel!" equ "0" ( ...) 看起来是简短,可是速度却远远不如使用if ,而且还不好多级判断.
作者: nf99290 时间: 2010-7-28 09:13
原帖由 caruko 于 2010-7-27 17:55 发表
建议..
给FOR 加一个 IF 判断,条件满足就 执行后面的 代码,不满足 就goto :eof
循环次数不变,但是执行的次数变了。
goto 跳出for是中断,某些情况下是可以,但是很多情况下不好用,特别是嵌套的时候可能跳出全部 ...
call + exit /b 不知道要如何做,试了下没成功。在想第二次的for能否用if加上计数器循环来判断。
作者: nf99290 时间: 2010-7-28 09:15
原帖由 caruko 于 2010-7-27 18:15 发表
你的脚本很奇怪,找到1就OK;找到2就继续循环,否者就退出?
但是查找2,一次就出结果了,怎么要循环5次?你这5次是一个效果。
是这样的:原程序肯定不是这个,原程序太复杂,怕影响分析,所以用这个简单的东东测试,主要是解决这个结构中如何跳出循环的目的。就是想符合条件就一次推出子for。
作者: nf99290 时间: 2010-7-28 09:18
原帖由 netbenton 于 2010-7-27 19:35 发表
使用 “&& || ”来代替if “!errorlevel!" equ "0" ( ...) 看起来是简短,可是速度却远远不如使用if ,而且还不好多级判断.
本来也是想用if来做的,但没成功,参考:http://bbs.bathome.net/viewthread.php?tid=8682 后来根据wankoilz 兄的提示换成&& ||就好了。程序比较少,所以速度应该没多大区别。
作者: nf99290 时间: 2010-7-28 10:15 标题: 貌似这样可以了,我再测试下
- cls
- for /f "eol=# tokens=1 delims= " %%i in (test.txt) do (
-
- echo %%i|findstr "\<1\>" &&echo ok||set rrr=%%i&&call:aaa 1 2 3 4 5
- )
-
- :aaa
- if %1 neq 5 (echo %rrr%|findstr "\<2\>" &&goto :eof||shift /1&goto aaa)
-
-
- exit
复制代码
作者: caruko 时间: 2010-7-28 14:48
call+exit /b 怎么用,具体看这里
http://bathome.net/thread-8739-1-1.html
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |