windows 批处理中 call 和 cmd /c 的区别

Difference between call and cmd /c in windows batch

谁能解释一下

之间有什么区别
call someBatchFile.bat ...

cmd /C someBatchFile.bat ...

他们都被建议给我作为 问题的解决方案,但我不明白为什么他们都有效,更重要的是,如果有任何重大差异我必须注意。

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

作为个人笔记,我曾经将通过 call 调用的批处理文件命名为 internal subroutine,而 external subroutine 通过 cmd /C 调用的那个(和 overlay 直接调用的批处理文件没有 call 也没有 cmd /Cinherits 调用者批处理文件的行为和上下文)。