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

[其他] 批处理怎样在for的子句内部形成goto循环?

我发现在 for 的子句内部根本就形不成 goto 循环,谁能解释一下为什么啊。比如在for循环时想要遇到条件就跳到循环最后一行然后继续循环,发现那样根本就不行。跳到最后一行之后就不继续执行循环了%>_<%
only the strong survive!

标题

用call就可以解决LZ的问题了。。。for内部goto是不能用的,否则直接跳出循环,设个变量又得开延迟,但一个call就把所有问题解释了,变量书写还比for方便

TOP

回复 7楼 的帖子

如果楼主想按这个思路写 goto  ,可以这样:
  1. @echo off
  2. for /f "tokens=1 delims=:" %%i in ('findstr /n .* a.txt') do set num1=%%i
  3. for /f "tokens=1 delims=:" %%i in ('findstr /n .* b.txt') do set num2=%%i
  4. if %num1% geq %num2% (goto start) else (
  5.         ren a.txt c.txt
  6.         ren b.txt a.txt
  7.         ren c.txt b.txt
  8. )
  9. :start
  10. set line=-1
  11. for /f "delims=" %%a in (a.txt) do call:b "%%a"
  12. pause&exit
  13. :b
  14. set c=
  15. set/a line+=1
  16. (for /f "delims=" %%a in ('more +%line%^<b.txt') do (
  17.         set c==
  18.         echo %~1
  19.         echo %%a
  20.         if defined c goto:eof
  21. ))>>c.txt
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 7楼 的帖子

最根本的原因是:批处理不是编程语言!
44楼的问题,就是因为没有文件读写函数。每次要在文件中定位到某一行,都得重新打开文件,通过比较行号或用more、findstr等命令过滤的方法才能定位到需要的地方。
不想换算法就换语言吧,比如VBS就是很好的选择。或者直接使用三方工具。

TOP

回复 6楼 的帖子

其实我遇到的问题在这里的44楼:http://www.bathome.net/viewthrea ... p;extra=&page=3  看看能否解决吧 不过刚才看讨论好像除了换一种算法之外没有其它办法了 哎……
only the strong survive!

TOP

回复 4楼 的帖子

是的,你可以参考这里的8楼代码 http://bbs.bathome.net/thread-10374-1-2.html
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 2楼 的帖子

不是跳出循环 而是跳到循环的最后一行 也就是跳过循环中部分内容
only the strong survive!

TOP

回复 3楼 的帖子

如果这样的循环不止一个
是用goto :eof 分割吗?
only the strong survive!

TOP

在 for 外执行 goto ,例如:
  1. @echo off
  2. for %%a in (1 2) do (
  3.         set a=0
  4.         call:a %%a
  5. )
  6. pause&exit
  7. :a
  8. set /a a+=%1
  9. echo %a%和%1
  10. if %a% leq 10 goto:a
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

批处理不支持break和continue,可惜啊。但可以模拟函数。

小声问一下:哪种语言用goto跳出循环后还很能继续循环?

TOP

返回列表