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

[其他] 在批处理脚本中调用 bat 的 exit 问题

本帖最后由 buyiyang 于 2023-5-22 16:50 编辑

先给一个例子,以下分别是1.bat与2.bat的内容
1.bat
  1. 2.bat
  2. echo,第一个脚本
  3. pause
复制代码
2.bat
  1. echo,第二个脚本
复制代码
执行1.bat会发现它闪退了,实际上它只执行了"echo,第二个脚本",然后直接退出了,因为2.bat不会返回,而且bat文件尾默认有一个exit。
看看exit命令的作用:
  1. 退出 CMD.EXE 程序(命令解释器)或当前批处理脚本。
  2. EXIT [/B] [exitCode]
  3.   /B          指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个批处理脚本外执行,则会退出 CMD.EXE
  4.   exitCode    指定一个数字号码。如果指定了 /B,将 ERRORLEVEL设成那个数字。如果退出 CMD.EXE,则用那个数字设置过程退出代码。
复制代码
所以执行完2.bat后就直接退出CMD.EXE了,可以在1.bat中这样解决:
  1. call 2.bat
  2. for /f %%i in ('2.bat') do @
  3. cmd /c 2.bat
复制代码
有时候,有需要在2.bat中显式地写上exit,这时call 2.bat也会直接退出,可以采取后面两种方法。
使用call最好是将exit改成exit /b,或者改为使用goto :eof返回call。

回复 2# 77七


    我的理解是2.bat与1.bat同一个进程,start是开一个新进程,call调用是开一个子进程。

TOP

返回列表