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

[其他] [已解决]含有call的批处理代码的执行流程是怎样的?

  1. @echo off
  2. call :msg "我是 好人"
  3. pause
  4. :msg
  5. echo %~1
复制代码
请看上面一段代码
我觉得执行结果应该是:
我是 好人


然而运行这个批处理的实际执行结果是这样的
  1. 我是 好人
  2. 请按任意键继续...
  3. ECHO 处于关闭状态
复制代码
我就糊涂了,这个程序的语句的执行顺序究竟是怎样的?

[ 本帖最后由 summerflower 于 2010-3-11 11:03 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2
我是一只小菜鸟,飞到东来飞到西……

批处理的call语句在调用完后是会返回的
也就是返回到下一句pause处
而批处理的标签:msg与函数并不相同
所有标签下的echo不会在主程序执行后跳过
而主程序又是不带参数运行的
所以echo %~1变成了无参数运行echo
所以会有ECHO 处于关闭状态的提示
1

评分人数

TOP

  1. @echo off
  2. call :msg "我是 好人"
  3. pause
  4. exit
  5. :msg
  6. echo %~1
复制代码
1

评分人数

论坛标题管理观察员

TOP

批处理是从上至下运行的,遇到call时则跳到指定位置,也是从上至下运行,当遇到goto :eof 或是到代码的结尾时,则返回到call的下一行继续从上至下运行,直到代码的结尾,或遇到exit或goto :eof
你的代码分7部运行的,最后两句运行了2次
以下数字为执行次序。
1、@echo off
2、call :msg "我是 好人"
5、pause
36、:msg
47、echo %~1
1

评分人数

技术问题请到论坛发帖求助!

TOP

pause 不是暂停吗??怎么还会执行其下的echo%~1呢???请指点一下!!

TOP

回复 5楼 的帖子

不是每个代码都是从上到下依次执行的,call和goto都可以改变执行顺序。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表