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

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

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

1,在当前直接call 另一个批处理,该批处理中的变量都可以在当前使用
2,如果另一个批处理中使用了 setlocal ,则在其结束前 Endlocal&set W=%W% ,以使得变量 W 在当前可用
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

用一个简单的CHOICE吧,我想处理这类问题会比较好用

TOP

示例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 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 4楼 的帖子

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

TOP

回复 5楼 的帖子

不执行哪个“后面的代码”?
  1. @echo off
  2. call "另一个批处理.bat"
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

楼主估计是要选择判断。可能是要加入if的意思
菜鸟学批,一批一大批~~~~~~

TOP

回复 4楼 的帖子

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

TOP

回复 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,看看运行结果,能帮助你理解

TOP

返回列表