我理解如何使用该call
命令从父文件中调用嵌套批处理文件,因为有大量资源:
但是,我不明白为什么从另一个批处理文件调用终止父代.
对于一个不那么抽象的例子,假设我有一个批处理文件,它将单独的批处理文件"链接"在一起,而我错误地没有call
在每行前面添加:
foo.bat
bar.bat
Run Code Online (Sandbox Code Playgroud)
这只会执行foo.bat然后退出.要正确执行这两个命令,我必须在每个语句之前添加前调用:
call foo.bat
call bar.bat
Run Code Online (Sandbox Code Playgroud)
为什么第一个功能仍然存在?为什么没有改变?我注意到call
这是在20世纪80年代后期发布的MS-DOS 3.3中引入的,所以这个功能仍然在这里用于反向兼容吗?
我无法想到它的任何(实际)用法,但也许我已经习惯了"新的"编程技术.
Sea*_*anC 33
DOS使用简单的文本处理(当你FILES=20
在config.sys中有类似的东西允许20个文件句柄时回来),所以打开文件,读取下一行,关闭文件,然后执行刚读取的行.如果文件名为another,则继续处理该文件,因此批处理文件只需要1个文件句柄.
在Microsoft输入call
命令之前,没有办法回到原始文件(不使用将前一个文件的名称作为参数的技巧,并使用临时文件让原始批处理文件知道它有圆顶处理,然后可能GOTO
是文件的下一部分).
正如Sean Cheshire写的那样,向后兼容是必要的.
但是,在不使用的CALL
情况下从批处理文件启动批处理文件不会终止父文件!
它看起来就是这样,因为在第二批退出后父母通常不会进一步执行.
但是在启动second.bat之前使用调用将显示第一批未终止.
parent.bat
echo parent.bat
call :myLabel
echo back in parent.bat main
exit /b
:myLabel
second.bat & echo back in parent.bat
exit /b
Run Code Online (Sandbox Code Playgroud)
second.bat
echo second.bat
exit /b
Run Code Online (Sandbox Code Playgroud)
我在这里使用secpond.bat & echo back ...
以避免cmd.exe的另一个错误/功能.
如果使用second.bat
不带任何额外它会开始second.bat
和跳转到标签:myLabel
中second.bat
!
归档时间: |
|
查看次数: |
20280 次 |
最近记录: |