中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 05:15
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » [为何?]DO……LOOP循环,怎么循环完后倒着循环回去了?
可打印版本  1,247 / 7
第1楼 Vampire 发表于 2007-04-26 11:53
初级用户 发帖 78 积分 176
[为何?]DO……LOOP循环,怎么循环完后倒着循环回去了?
代码如下,请高手帮忙分析下……切盼


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 0e
  4. mode con lines=20 cols=60
  5. set count=-1
  6. set a=今天又是健康、快乐、积极、进步的一天,抬起头呀嘛哦嘿,向前走呀嘛哦嘿…… ——呼吸新世界
  7. :loop
  8. set /a count+=1
  9. call set temp=%%a:~!count!,1%%
  10. if "%temp%"=="" (
  11. goto out
  12. ) else (
  13. call set /p=%%a:~!count!,1%%<nul
  14. call :sound "%temp%"
  15. )
  16. :sound
  17. mshta vbscript:createobject("sapi.spvoice").speak(%1)(window.close)
  18. goto loop
  19. :out
  20. echo.
  21. pause>nul
Vampire发表于: 2007-04-25 22:41


[ Last edited by Vampire on 2007-4-25 at 11:03 PM ]
第2楼 lxmxn 发表于 2007-04-26 12:06
版主 发帖 4,938 积分 11,386
在mshta下面加一个goto :EOF试试。
第3楼 Vampire 发表于 2007-04-27 02:59
初级用户 发帖 78 积分 176
谢lxmxn版主的回答,在mshta下面加goto :EOF,会出错,加在:out下面还是会循环回去。
第4楼 lxmxn 发表于 2007-04-27 03:55
版主 发帖 4,938 积分 11,386
修改一下:
第5楼 zh159 发表于 2007-04-27 07:35
金牌会员 发帖 1,467 积分 3,687
在goto的循环中只要不被“()”,或“&”同行,可以不用延迟变量:call set temp=%%a:~%count%,1%%

简化之:


[ Last edited by zh159 on 2007-4-26 at 06:38 PM ]
第6楼 Vampire 发表于 2007-04-29 05:20
初级用户 发帖 78 积分 176
谢谢楼上两位的回答,又学到两样东西。因为这两天有点事所以看得慢了请见谅,再请教下,帮助文件里对于goto :eof 是这样说明的:

如果启用了命令扩展(即默认状态),并且使用带有目标标签为 :EOF 的 goto 命令,则可以在不定义标签的情况下将控制传送到当前批处理脚本文件的末端,然后退出批处理脚本文件。

但为何还可以继续执行循环呢?难道因为它只是一个调用过程,对全局环境的结束没有权限?

[ Last edited by Vampire on 2007-4-28 at 04:27 PM ]
第7楼 flamemperor 发表于 2007-09-13 17:37
初级用户 发帖 29 积分 66
分析一下,感觉楼主的代码在:sonud 那里 goto回loop好像不对,因为这时候sonud这个子过程还没有结束。直到最后temp的值为空,才到了out那里,这时候最后一次sound才结束,然后,就一个一个退回去了。

eof只能退出当前子程序吧。

不知道说的对不对。

[ Last edited by flamemperor on 2007-9-13 at 05:58 PM ]
第8楼 Vampire 发表于 2008-07-21 19:14
初级用户 发帖 78 积分 176
楼上正解……
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023