Board logo

标题: [文本处理] 批处理调用另一个批处理后如何返回执行下面的代码 [打印本页]

作者: aishangwangluo    时间: 2011-1-17 09:22     标题: 批处理调用另一个批处理后如何返回执行下面的代码

先执行一个批处理,在执行中需要用到另一个批处理,希望调用的批处理返回一个值,或者直接回到当前的批处理中,继续执行下面的代码!
有哪位高手,能举例说明吗?
作者: hanyeguxing    时间: 2011-1-17 10:21

1,在当前直接call 另一个批处理,该批处理中的变量都可以在当前使用
2,如果另一个批处理中使用了 setlocal ,则在其结束前 Endlocal&set W=%W% ,以使得变量 W 在当前可用
作者: wc726842270    时间: 2011-1-17 10:39

用一个简单的CHOICE吧,我想处理这类问题会比较好用
作者: hanyeguxing    时间: 2011-1-17 10:56

示例1:
当前批处理:
  1. @echo off
  2. call "另一个批处理.bat"
  3. echo 今天为本年第%D%天
  4. pause
复制代码
另一个批处理:
  1. @echo off
  2. set/a D=1%date:~8,2%%%100,M=1%date:~5,2%%%100-1
  3. for /l %%a in (1,1,%M%) do set/a "K=!(%%a-4)|!(%%a-6)|!(%%a-9)|!(%%a-11)","D+=!(%%a-2)*(28+!(%date:~0,4%%%4))+K*30+(!!(%%a-2)&!K)*31"
复制代码
示例2:
当前批处理:
  1. @echo off&setlocal enableDelayedExpansion
  2. call "另一个批处理.bat"
  3. echo 今天为本年第%D%天
  4. pause
复制代码
另一个批处理:
  1. @echo off&setlocal disabledelayedexpansion
  2. set/a D=1%date:~8,2%%%100,M=1%date:~5,2%%%100-1
  3. for /l %%a in (1,1,%M%) do set/a "K=!(%%a-4)|!(%%a-6)|!(%%a-9)|!(%%a-11)","D+=!(%%a-2)*(28+!(%date:~0,4%%%4))+K*30+(!!(%%a-2)&!K)*31"
  4. Endlocal&set D=%D%
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-17 13:49 编辑 ]
作者: Hello123World    时间: 2011-1-17 12:42     标题: 回复 4楼 的帖子

call 是调用完其它批处理之后执行后面的代码,但是如果是需要调用其它批处理后不执行后面的代码,只能在call后 加exit来实现吗,有没有更直接的方法(命令)。
  1. @echo off
  2. call "另一个批处理.bat"
  3. exit
  4. echo 今天为本年第%D%天
  5. pause
复制代码

作者: hanyeguxing    时间: 2011-1-17 13:26     标题: 回复 5楼 的帖子

不执行哪个“后面的代码”?
  1. @echo off
  2. call "另一个批处理.bat"
复制代码

作者: yhcbird    时间: 2011-1-17 14:33

楼主估计是要选择判断。可能是要加入if的意思
作者: aishangwangluo    时间: 2011-1-17 17:04     标题: 回复 4楼 的帖子

刚刚接触批处理,很多东西还不明白,感谢版主的大力支持,经过您的指点,我明白了call 才能达到这种效果!
再次感谢!
5楼的意思,应该是执行call "另一个批处理.bat"后,停止执行call后面的代码,以"另一个批处理.bat"来关闭cmd窗口,停止批处理吧!
不知道我这样理解对不对?
作者: wc726842270    时间: 2011-1-17 18:30     标题: 回复 8楼 的帖子

CALL语句调用结束后会返回它的下一句,继续执行下面的命令,
如果调用外部的P难以理解,帮你合一下(是5L的 第一个)
  1. @echo off
  2. call :2
  3. echo 今天为本年第%D%天
  4. pause
  5. :2
  6. @echo off
  7. set/a D=1%date:~8,2%%%100,M=1%date:~5,2%%%100-1
  8. for /l %%a in (1,1,%M%) do set/a "K=!(%%a-4)|!(%%a-6)|!(%%a-9)|!(%%a-11)","D+=!(%%a-2)*(28+!(%date:~0,4%%%4))+K*30+(!!(%%a-2)&!K)*31"
复制代码
有兴趣就改变下顺序,或在最后加个PAUSE,看看运行结果,能帮助你理解




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2