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

回复 24楼 的帖子

我只是打个比方,并不是说这是一个bug,虽然这很可能是一个bug.

还有,我的目的不是解决代码问题, 只是本着学习的态度想知道这是什么问题.

对了, 那个跳不出来的例子很好!

TOP

回复 18楼 的帖子

这位朋友之前没有去过非常批处理verybat论坛,像这个for的问题等很多原理理论知识都是不少高手从那里探讨总结出来的,zqz0012005就是其中之一,我给的那个跳不出来的例子就是从他的帖子里看来的。所以是不是Bug、是什么原理他当然知道,所以他才给了那样的建议(这里他再次详述了批处理的本质和用途)。

可惜非常批处理竟然关闭了,很多精华我都没有备份下来,实在可惜!

TOP

原帖由 caruko 于 2010-12-20 18:16 发表
=.=
不知道你怎么回事...
我这边是瞬间就到pause状态了...

当然是瞬间pause了....
只是这个pause还在for里面~~敲任意键会继续哦.

TOP

=.=
不知道你怎么回事...
我这边是瞬间就到pause状态了...

TOP

回复 20楼 的帖子

谢谢.

不过显然没有break.
会call 100000000次:end

TOP

for语句块是一次性装载到内存中的,因此很可能翻译后的代码是类似汇编中的固定次数循环;因为for并没有提供break语句。

而调用call时会重新装载语句代码,因此可能可以中断循环,在call中再调用goto就达到break的目的了。


或许启用变量延迟,也可以达到效果,楼主可以试一下。

[ 本帖最后由 caruko 于 2010-12-20 16:15 编辑 ]

TOP

为什么不试试在call的语句段里放弃exit,调用goto呢?
  1. @echo off
  2. for /l %%i in (1,1,100000000) do (
  3. echo %%i,%time%
  4. call :end
  5. )
  6. :end
  7. goto ee
  8. goto :eof
  9. :ee
  10. echo %time%
  11. pause
复制代码

[ 本帖最后由 caruko 于 2010-12-20 16:11 编辑 ]

TOP

原帖由 zqz0012005 于 2010-12-19 22:32 发表
注意批处理的初衷不是一种程序语言,只是为了方便在DOS中操作而把多个命令写在一个bat文件里进行批量处理、执行,并引入了少许基本的流程控制语句(如if判断文件是否存在或以上一条命令执行结果为条件,for遍历文件) ...


我的初衷也不是解决这么一个问题, 只是我在尝试写这样一个代码的时候发现这么一个问题.
然后我就来这里问一下, 我只是好奇为什么goto不能迅速跳出For循环.

您完全可以说,"哦, 这个是CMD的一个bug".

我觉得用批处理写出这个东西来,比用C来写更有成就感, 因为这个东西用C来写太简单了.

可能是我太执着了, 不好意思~

TOP

原帖由 wc726842270 于 2010-12-20 09:31 发表
有些不解。LZ可以利用多个GOTO(用IF和FOR配合)达到目的效果,最后再结束P就像8L那样不是也一样达到效果了

嗯,是这样的, 8楼的效果是使用了Exit来退出了.
但是他退出了整个程序, 我的本意并不是退出整个程序, 而是接着计算下一个数.
你可以运行一下6楼的代码就知道了.

TOP

有些不解。LZ可以利用多个GOTO(用IF和FOR配合)达到目的效果,最后再结束P就像8L那样不是也一样达到效果了

TOP

注意批处理的初衷不是一种程序语言,只是为了方便在DOS中操作而把多个命令写在一个bat文件里进行批量处理、执行,并引入了少许基本的流程控制语句(如if判断文件是否存在或以上一条命令执行结果为条件,for遍历文件),到了Windows NT时代强化了一些命令的功能,但它本质没变。连程序设计语言最基本的函数功能都没有(虽然可用Call来模拟,但只是“模拟”而已),比Linux Shell脚本都远远不如。所以想用批处理实现各种算法根本就是吃力不讨好的事情,虽然有些算法也能实现,但效率上来说几乎没有什么实用性。有这个时间,去学一门程序语言都是有可能的,或者简单点vbs也很容易。
除开算法,需要大量用到goto语句的时候还真是很少(注意goto :eof不算,它相当于exit /b),否则真需要好好考虑一下你所用到的方法。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

原帖由 cjiabing 于 2010-12-19 10:34 发表
忍了半个月,今天来看看大家。
大量使用 goto不是好的程序?这个结论有点绝对,好不好要看使用环境和条件,不管三七二十一就用当然不好,但在该用时不用就更不好,特别是在一些大量重复代码情况下,不大量使用跳转语 ...

How?
我只想迅速跳出For循环而已.

TOP

原帖由 powerbat 于 2010-12-19 00:41 发表
>>"大量使用goto语句不是一种好的程序结构。"
>头一次听人对批处理说这话~~~

看来你对程序设计接触得非常少,这应该是一种共识。

看样子, 阁下在批处理里面一定很少使用goto了.

TOP

忍了半个月,今天来看看大家。
大量使用 goto不是好的程序?这个结论有点绝对,好不好要看使用环境和条件,不管三七二十一就用当然不好,但在该用时不用就更不好,特别是在一些大量重复代码情况下,不大量使用跳转语句就意味着使用大量重复代码,造成语句臃肿。
就楼主的问题,用‘’&‘’可能解决问题,致于原因就大大们解释比较好。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

>>"大量使用goto语句不是一种好的程序结构。"
>头一次听人对批处理说这话~~~

看来你对程序设计接触得非常少,这应该是一种共识。

TOP

返回列表