我了解如何使用call
命令从父文件中调用嵌套的批处理文件,因为这方面有很多资源:
但是,我不明白为什么从另一个调用另一个批处理文件会终止父级。
对于一个不那么抽象的示例,假设我有一个批处理文件,将各个批处理文件“链接”在一起,并且我错误地没有在每行前面添加
call
:foo.bat
bar.bat
这只会执行foo.bat,然后退出。为了正确执行这两个命令,我必须在每个语句之前添加调用:
call foo.bat
call bar.bat
为什么第一个功能仍然存在?为什么没有更改?我注意到
call
是在1980年代后期发布的MS-DOS 3.3中引入的,因此此功能是否仍在这里是为了实现反向兼容性?我想不出它的任何(实际)用法,但是也许我已经习惯于“新的”编程技术。
最佳答案
DOS使用简单的文本处理(当您在config.sys中使用FILES=20
之类的东西时,它允许20个文件句柄),因此打开文件,读取下一行,关闭文件,然后执行刚读取的行。如果该文件调用了另一个文件,则处理将继续对该文件进行,因此批处理文件仅需要一个文件句柄。
在Microsoft放入call
命令之前,没有办法返回到原始文件(没有使用一些技巧,例如将先前文件的名称作为参数,以及使用临时文件让原始批处理文件知道它已经圆顶了处理,然后可以GOTO
文件的下一部分)。
关于batch-file - 为什么在不将 “call”附加到该行的情况下调用嵌套批处理文件会退出父批处理文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638705/