windows – 为什么不需要`call`从管道中涉及的调用批处理脚本返
发布时间:2020-12-14 01:42:09 所属栏目:Windows 来源:网络整理
导读:假设存在执行另一个批处理文件(被调用者)的批处理文件(调用者),则需要使用调用命令以便在被调用者完成执行后返回调用者.这是一个例子: caller.bat: echo Calling another script...call callee.batecho Returned from callee... callee.bat(在同一位置):
假设存在执行另一个批处理文件(被调用者)的批处理文件(调用者),则需要使用调用命令以便在被调用者完成执行后返回调用者.这是一个例子:
caller.bat: echo Calling another script... call callee.bat echo Returned from callee... callee.bat(在同一位置): echo Being called from caller... 输出将是这个(省略命令echos),表明执行按预期返回:
如果在调用者中解除了call命令,则输出将为:
但是一旦被调用者涉及管道(|),则是否使用了call命令没有区别.例如: caller.bat(被调用者保持不变): echo Calling another script... break | callee.bat echo Returned from callee... 输出将是这个,虽然没有调用命令.
这种行为的原因是什么,导致执行返回给调用者的原因是什么?
有两种方法可以从调用者调用另一个批处理文件(主文件):call callee.bat和cmd / C callee.bat;不同之处在于调用在调用者程序的相同上下文中执行另一个Batch文件,因此它们共享相同的环境变量和另一个状态,而cmd / C在完全独立的上下文中执行另一个Batch文件.就像个人笔记一样,我曾经将内部子程序命名为通过调用调用的批处理文件,而外部子程序则通过cmd / C调用(并覆盖直接调用的Batch文件而不调用cmd / C,继承行为和上下文)调用者批处理文件).
在执行管道时,管道的两侧都是通过cmd / C执行的,因此两侧都被调用为外部子程序.这样,如果管道的任何一侧是Batch.BAT文件,它在结束时返回到调用者程序. 放置在for / F命令中的被调用者批处理文件中也会发生相同的行为,并且出于同样的原因而异常; for / F %% a in(‘calle.bat’)do … (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- winapi – Win32重叠的I/O – 完成例程或WaitForMultipleOb
- Windows Phone 7 – WP7无效的跨线程访问 – ScheduledTask
- 是否可以将Cython代码编译为dll,以便C应用程序可以调用它?
- wpf – Microsoft UI自动化库与编码UI测试
- Windows中的Haskell列表驱动器
- winapi – Windows内核中可能的最大文件名长度
- windows-phone-7 – 使用Visual Studio 2012(RTM,Premium)为
- 在Windows cmd脚本中添加%TIME%变量
- Caused by com microsoft sqlserver jdbc SQLServerExcepti
- windows – Django Apache/mod_python管理CSS不显示管理表