![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-08 11:20 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [总结]call和goto的异同点 |
| 可打印版本 2,764 / 17 |
| 第1楼 dnawo | 发表于 2008-04-25 23:06 |
| 初级用户 发帖 13 积分 38 | |
|
[总结]call和goto的异同点 执行结果: 早上好! 执行结果: 早上好! 从上边两个例子我们已经可以很明白的看出call和goto的异同点了: 相同点:call和goto都可以将流程跳转到标签处。 不同点:goto将流程跳转到标签处后,程序从标签处开始执行到结束,整个流程执行完毕;call将流程跳转到标签处后,程序从标签处开始执行到结束,然后会跳转回执行call的下一条语句,直到整个流程执行完毕;所以call并不会像goto那样打乱了流程,它只是中断了当前流程,但仍保证整个流程按原顺序进行。 在第二个例子中我们可以在标签后适当的地方调用goto :eof,使流程提前结束,提前将流程转移call的下一条语句: 执行结果已和例二有所不同,先显示: 早上好! 按任意键后接着显示"中午好!",到goto :eof后退出! 很显然,如果在例一中加入goto :eof则只是提前结束了流程。 [ Last edited by dnawo on 2008-4-28 at 02:14 PM ] |
|
| 第2楼 pusofalse | 发表于 2008-04-25 23:17 |
| 银牌会员 发帖 646 积分 1,604 | |
|
顶!~ call的用法不止这些,感觉最难的就是call了
|
|
| 第3楼 plp626 | 发表于 2008-04-25 23:17 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
很好,新手有福了,
我在补充句:goto比call速度稍快点。 当然call的用处简直太多了, for,if,call,setlocal,goto,set,echo, 这7个命令结合着灵活运用,哪不容易, 多进程时还有个start,呵呵,大家都不太用,其实强大着呢。。。 |
|
| 第4楼 pusofalse | 发表于 2008-04-25 23:21 |
| 银牌会员 发帖 646 积分 1,604 | |
|
谁能发篇专门讲解call的详细又详细的文章~?我等新手感激不尽啊~
|
|
| 第5楼 dnawo | 发表于 2008-04-25 23:21 |
| 初级用户 发帖 13 积分 38 | |
|
恩,一点一滴的积累~~~~~~~~~~
|
|
| 第6楼 dnawo | 发表于 2008-04-25 23:46 |
| 初级用户 发帖 13 积分 38 | |
Originally posted by pusofalse at 2008-4-25 11:21 PM: 期待高手来,我也是这几天学学批处理,做些总结^_^ |
|
| 第7楼 bat-zw | 发表于 2008-04-26 12:11 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
我来讲几句: &&首先楼主能养成总结的习惯是很好的,知识就是这样积累和巩固的;
其次做如下说明: 1、楼主在两篇帖子里都提到了goto :eof这一特殊标签,其实eof就是end of file(文件结尾)的缩写,goto :eof在批处理的意思就是跳转至程序结尾,但要注意的是如在call后的子程序中goto :eof则表示结束子程序回到父程序; 2、除了goto :eof外goto 后面的标签名不要加":"; 3、@echo off是表示关闭所有回显(包括@echo off这句),所以在这句后面除非出现了echo on,后面所有的语句是不要加"@"的; 4、goto一般是和if组合在一起使用的,if(not)......goto....(如果条件成立(不成立),跳转到),象楼主这样直接goto的用法确实很少; 5、至于call的用法请楼主在论坛内多搜索,我在这里就不罗嗦了,但可以说一句:call是很强大的命令,用好它能为你带来极大的方便。 还是转个使用call命令的实例吧(请看此贴7楼的代码):http://www.cn-dos.net/forum/viewthread.php?tid=39727&fpage=2 [ Last edited by zw19750516 on 2008-4-26 at 12:17 PM ] |
|
| 第8楼 moniuming | 发表于 2008-04-26 12:40 |
| 银牌会员 发帖 574 积分 1,335 来自 广西 | |
| 第9楼 bat-zw | 发表于 2008-04-26 13:51 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
再来个简单点的实例: 将会显示www.cn-dos.net 这就是通过call将七个字符串传递给了子程序lp,而在子程序中则分别用%1-%7变量表示了这七个字符串。 |
|
| 第10楼 bat-zw | 发表于 2008-04-26 14:23 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
再来个call延时的用法: &&运行代码一,我们并不能得到想要的结果“cn-dos.net”,而是会显示为“%str:~4%”,这是为什么呢?因为在cmd中存在预处理机制,在读取echo %%str:~%n%%%这句的时候,先是迫不及待地脱去最外层的%符,变为了echo %str:~%n%%,在这里第二层的%就变成了字符%了,自然就显示为“%str:~4%”了,而要如何解决这个问题呢?我们就可用到call的延时作用了,通过call延时后,cmd就会一层层脱去%并解释%里面的变量,如运行代码二就能正确显示为“cn-dos.net”了。
[ Last edited by zw19750516 on 2008-4-26 at 02:29 PM ] |
|
| 第11楼 dnawo | 发表于 2008-04-26 17:10 |
| 初级用户 发帖 13 积分 38 | |
@echo off是表示关闭所有回显(包括@echo off这句),所以在这句后面除非出现了echo on,后面所有的语句是不要加"@"的; 没注意到,感谢提醒 |
|
| 第12楼 dslz666 | 发表于 2008-04-28 05:11 |
| 中级用户 发帖 117 积分 233 | |
|
谢谢楼主,又进一步理解的 call 跟GOTO
|
|
| 第13楼 bjsh | 发表于 2008-04-28 17:01 |
| 银牌会员 发帖 621 积分 2,000 | |
|
call call call echo %%%%%%%%%%%%%%%d%%%%%%%%%%%%%%%
类似与这种用法的 实际上call类似与 shell 里的 eval 强制cmd再次扫描命令 用的巧的话 有妙用哦。 |
|
| 第14楼 jfm034 | 发表于 2008-04-29 17:36 |
| 新手上路 发帖 8 积分 16 | |
|
很强大的语句。。
唉。。要多多练习才能熟练应用 |
|
| 第15楼 xvzheng | 发表于 2008-04-29 23:23 |
| 新手上路 发帖 7 积分 14 | |
|
很经典!!!!!!!!!!!
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |