[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[代码合集] 批处理for循环嵌套中goto:eof无法跳出子循环

目的:

for条件不满足,跳到子for,子for最多执行5次,假如第2次符合,就跳出子for继续执行上层的循环;5次都不满足,结束批处理。

当前问题是:到了子循环,条件已经满足了,子循环还是会执行完5次,而不会goto :eof跳出子循环继续执行上层循环,不知道要怎么弄了。
注:条件限制不能使用if做判断,只能使用&& ||方式。
  1. cls
  2. for /f "eol=# tokens=1 delims= " %%i in (test.txt) do (
  3.     echo %%i|findstr "\<1\>" &&echo ok||call:111
  4.     )
  5.     :111
  6.    for /l %%a in (1,1,5) do (
  7. echo %%i|findstr "\<2\>" &&goto :eof||exit
  8. )
复制代码
test.txt文件内容为
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
复制代码

[ 本帖最后由 nf99290 于 2010-7-27 22:17 编辑 ]

建议..
给FOR 加一个 IF 判断,条件满足就 执行后面的 代码,不满足 就goto :eof
循环次数不变,但是执行的次数变了。

goto 跳出for是中断,某些情况下是可以,但是很多情况下不好用,特别是嵌套的时候可能跳出全部FOR。

另外,个人觉得如果要嵌套循环,并且需要跳出单个循环的时候,用call + exit /b 来做。

exit /b 是退出子脚本,并且可以设置返回值,对call 适用。

[ 本帖最后由 caruko 于 2010-7-27 18:01 编辑 ]

TOP

你的脚本很奇怪,找到1就OK;找到2就继续循环,否者就退出?
但是查找2,一次就出结果了,怎么要循环5次?你这5次是一个效果。

TOP

使用 “&& || ”来代替if “!errorlevel!" equ "0" (  ...) 看起来是简短,可是速度却远远不如使用if ,而且还不好多级判断.

TOP

原帖由 caruko 于 2010-7-27 17:55 发表
建议..
给FOR 加一个 IF 判断,条件满足就 执行后面的 代码,不满足 就goto :eof
循环次数不变,但是执行的次数变了。

goto 跳出for是中断,某些情况下是可以,但是很多情况下不好用,特别是嵌套的时候可能跳出全部 ...


call  + exit /b 不知道要如何做,试了下没成功。在想第二次的for能否用if加上计数器循环来判断。

TOP

原帖由 caruko 于 2010-7-27 18:15 发表
你的脚本很奇怪,找到1就OK;找到2就继续循环,否者就退出?
但是查找2,一次就出结果了,怎么要循环5次?你这5次是一个效果。


是这样的:原程序肯定不是这个,原程序太复杂,怕影响分析,所以用这个简单的东东测试,主要是解决这个结构中如何跳出循环的目的。就是想符合条件就一次推出子for。

TOP

原帖由 netbenton 于 2010-7-27 19:35 发表
使用 “&& || ”来代替if “!errorlevel!" equ "0" (  ...) 看起来是简短,可是速度却远远不如使用if ,而且还不好多级判断.


本来也是想用if来做的,但没成功,参考:http://bbs.bathome.net/viewthread.php?tid=8682  后来根据wankoilz 兄的提示换成&& ||就好了。程序比较少,所以速度应该没多大区别。

TOP

貌似这样可以了,我再测试下

  1. cls
  2. for /f "eol=# tokens=1 delims= " %%i in (test.txt) do (
  3. echo %%i|findstr "\<1\>" &&echo ok||set rrr=%%i&&call:aaa 1 2 3 4 5
  4. )
  5. :aaa
  6. if %1 neq 5 (echo %rrr%|findstr "\<2\>" &&goto :eof||shift /1&goto aaa)
  7. exit
复制代码

TOP

call+exit /b 怎么用,具体看这里
http://bathome.net/thread-8739-1-1.html

TOP

返回列表