差异

2016-08-20 70 views
1

能有人请解释什么是差异

call someBatchFile.bat ... 

而且

cmd /C someBatchFile.bat ... 

之间的差别,他们两人都建议我为this解决问题的办法,但我不明白为什么他们都工作,更重要的是,如果我有什么重大差异,我必须意识到。

+2

第二条语句启动一个新进程,someBatchFile.bat对环境变量所做的任何更改都不会影响当前批处理文件,也不会对其进行显示。可能很好,可能会很糟糕。 –

+1

请参阅[这个答案](http://stackoverflow.com/questions/36095847/why-is-there-no-need-for-call-to-return-from-called-batch-script-which-is-invo/36096956#36096956)。 – Aacini

+0

@Aacini,那是我正在寻找的答案。由于链接的问题不同,我认为如果你在这里回答它也会有好处。请你这样做,以便我可以将其标记为已回答? – carlossierra

回答

5

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

正如我个人而言,我用来命名内部子程序通过call调用批处理文件,并外部子程序一个通过cmd /C(和覆盖直接调用,而不call也不cmd /C批处理文件调用, 继承调用者批处理文件的行为和上下文)。