在Windows批处理中,call和cmd /c之间的区别

6
有人能解释一下“”和“”之间的区别吗?
call someBatchFile.bat ...

And(以及)
cmd /C someBatchFile.bat ...

他们都被建议作为解决这个问题的方案,但我不明白它们为什么都有效,更重要的是,是否有任何显著的差异我必须注意。


2
第二个语句启动了一个新的进程,一些批处理文件(someBatchFile.bat)对环境变量所做的任何更改都不会影响当前批处理文件,并且这些更改也不会被看到。这可能是好事,也可能是坏事。 - Hans Passant
1
请参考这个答案 - Aacini
@Aacini 那就是我想要的答案。由于链接的问题不同,我认为如果你在这里也回答一下会很有益。你可以这样做吗,这样我就可以标记它为已回答? - carlossierra
1个回答

12
区别在于call以与调用程序相同的上下文执行其他批处理文件,因此它们共享相同的环境变量和其他状态(如echo ON/OFF或延迟扩展),而cmd /C在完全分离的上下文中执行其他批处理文件,因此所做的任何更改在原始文件中都无法反映。

仅作个人记录,我曾经使用call调用的批处理文件来命名内部子例程,使用通过cmd /C调用的批处理文件来命名外部子例程(并且没有callcmd /C直接调用的覆盖批处理文件会继承调用批处理文件的行为和上下文)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接