标题: [其他] 在批处理脚本中调用 bat 的 exit 问题 [打印本页]
作者: buyiyang 时间: 2023-5-22 14:48 标题: 在批处理脚本中调用 bat 的 exit 问题
本帖最后由 buyiyang 于 2023-5-22 16:50 编辑
先给一个例子,以下分别是1.bat与2.bat的内容
1.bat复制代码
2.bat复制代码
执行1.bat会发现它闪退了,实际上它只执行了"echo,第二个脚本",然后直接退出了,因为2.bat不会返回,而且bat文件尾默认有一个exit。
看看exit命令的作用:- 退出 CMD.EXE 程序(命令解释器)或当前批处理脚本。
- EXIT [/B] [exitCode]
- /B 指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个批处理脚本外执行,则会退出 CMD.EXE
- exitCode 指定一个数字号码。如果指定了 /B,将 ERRORLEVEL设成那个数字。如果退出 CMD.EXE,则用那个数字设置过程退出代码。
复制代码
所以执行完2.bat后就直接退出CMD.EXE了,可以在1.bat中这样解决:- call 2.bat
- for /f %%i in ('2.bat') do @
- cmd /c 2.bat
复制代码
有时候,有需要在2.bat中显式地写上exit,这时call 2.bat也会直接退出,可以采取后面两种方法。
使用call最好是将exit改成exit /b,或者改为使用goto :eof返回call。
作者: 77七 时间: 2023-5-22 15:49
本帖最后由 77七 于 2023-5-22 16:20 编辑
感谢大佬分享!
请问直接在1.bat 里面写另外的批处理 2.bat 是什么用法?好像没多大意义...都要退出cmd我之前见到过 直接写 xxx.exe 相当于有个隐形的call 或者start说法,记不清楚了。
好像和start 和call 效果都不同
我试验了下start /b,结果发现一点奇怪的事
执行
1.bat
- @echo off
- start /b 2.bat
- timeout 1 >nul
- echo,第一个脚本1
- timeout 1 >nul
- echo,第一个脚本2
- timeout 1 >nul
- echo,第一个脚本3
- timeout 1 >nul
- pause
复制代码
2.bat 雷同1,除了start
结果
- 第二个脚本1
- 第二个脚本2
- 第一个脚本1
- 第二个脚本3
- 第一个脚本2
- 第一个脚本3
复制代码
发现它们居然是同时执行的.....
作者: buyiyang 时间: 2023-5-22 16:42
回复 2# 77七
我的理解是2.bat与1.bat同一个进程,start是开一个新进程,call调用是开一个子进程。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |