标题: [其他] 批处理怎样在for的子句内部形成goto循环? [打印本页]
作者: vincentzhou 时间: 2011-1-2 17:33 标题: 批处理怎样在for的子句内部形成goto循环?
我发现在 for 的子句内部根本就形不成 goto 循环,谁能解释一下为什么啊。比如在for循环时想要遇到条件就跳到循环最后一行然后继续循环,发现那样根本就不行。跳到最后一行之后就不继续执行循环了%>_<%
作者: powerbat 时间: 2011-1-2 17:42
批处理不支持break和continue,可惜啊。但可以模拟函数。
小声问一下:哪种语言用goto跳出循环后还很能继续循环?
作者: hanyeguxing 时间: 2011-1-2 17:43
在 for 外执行 goto ,例如:- @echo off
- for %%a in (1 2) do (
- set a=0
- call:a %%a
- )
- pause&exit
- :a
- set /a a+=%1
- echo %a%和%1
- if %a% leq 10 goto:a
复制代码
作者: vincentzhou 时间: 2011-1-2 18:11 标题: 回复 3楼 的帖子
如果这样的循环不止一个
是用goto :eof 分割吗?
作者: vincentzhou 时间: 2011-1-2 18:12 标题: 回复 2楼 的帖子
不是跳出循环 而是跳到循环的最后一行 也就是跳过循环中部分内容
作者: hanyeguxing 时间: 2011-1-2 18:51 标题: 回复 4楼 的帖子
是的,你可以参考这里的8楼代码 http://bbs.bathome.net/thread-10374-1-2.html
作者: vincentzhou 时间: 2011-1-2 19:07 标题: 回复 6楼 的帖子
其实我遇到的问题在这里的44楼:http://www.bathome.net/viewthrea ... p;extra=&page=3 看看能否解决吧 不过刚才看讨论好像除了换一种算法之外没有其它办法了 哎……
作者: powerbat 时间: 2011-1-2 21:23 标题: 回复 7楼 的帖子
最根本的原因是:批处理不是编程语言!
44楼的问题,就是因为没有文件读写函数。每次要在文件中定位到某一行,都得重新打开文件,通过比较行号或用more、findstr等命令过滤的方法才能定位到需要的地方。
不想换算法就换语言吧,比如VBS就是很好的选择。或者直接使用三方工具。
作者: hanyeguxing 时间: 2011-1-3 09:24 标题: 回复 7楼 的帖子
如果楼主想按这个思路写 goto ,可以这样:- @echo off
- for /f "tokens=1 delims=:" %%i in ('findstr /n .* a.txt') do set num1=%%i
- for /f "tokens=1 delims=:" %%i in ('findstr /n .* b.txt') do set num2=%%i
- if %num1% geq %num2% (goto start) else (
- ren a.txt c.txt
- ren b.txt a.txt
- ren c.txt b.txt
- )
- :start
- set line=-1
- for /f "delims=" %%a in (a.txt) do call:b "%%a"
- pause&exit
- :b
- set c=
- set/a line+=1
- (for /f "delims=" %%a in ('more +%line%^<b.txt') do (
- set c==
- echo %~1
- echo %%a
- if defined c goto:eof
- ))>>c.txt
复制代码
作者: greenworld 时间: 2011-1-4 12:42 标题: 标题
用call就可以解决LZ的问题了。。。for内部goto是不能用的,否则直接跳出循环,设个变量又得开延迟,但一个call就把所有问题解释了,变量书写还比for方便
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |