批处理文件 – 为什么调用一个嵌套的批处理文件,而不需要在该行的“调用”之前退出父批处理文件?

我了解如何使用call命令从父文件中调用嵌套批处理文件,因为有很多资源:

> http://www.robvanderwoude.com/call.php
> http://ss64.com/nt/call.html
> bat-file termination

但是,我不明白为什么从另一个调用另一个批处理文件会终止父进程。

对于一个不那么抽象的例子,假设我有一个批处理文件,将“链接”在一起分开的批处理文件,我错误地没有为每一行添加调用:

foo.bat
bar.bat

这只会执行foo.bat然后退出。要正确执行这两个命令,我必须在每个语句之前先调用:

call foo.bat
call bar.bat

为什么第一个功能仍然存在?为什么没有改变?我注意到在80年代后期发布的MS-DOS 3.3中引入了这个呼叫,所以这个功能在这里还是为了反向兼容吗?我不能想到任何(实际)的用法,但也许我习惯于“新的”编程技术。

最佳答案
DOS使用简单的文本处理(当你有这样的东西FILES = 20在config.sys中允许20个文件句柄的时候),所以打开文件,读取下一行,关闭文件,然后执行行只读。如果该文件称为另一个文件,则处理继续使用该文件,因此批处理文件只需要1个文件句柄。

直到微软打入调用命令,没有办法恢复到原始文件(不使用像以前的文件的名称作为参数,并使用临时文件让原始批处理文件知道它有一些顶点的技巧处理,然后可以GOTO下一部分文件)。

转载注明原文:批处理文件 – 为什么调用一个嵌套的批处理文件,而不需要在该行的“调用”之前退出父批处理文件? - 代码日志