从另一个或从提示调用Windowsbatch file的几种方法。 哪一个在哪种情况下?

Windowsbatch file( called.batcalled.cmd )可以通过多种方式从另一batch file( caller.batcaller.cmd )或交互式cmd.exe提示中caller.cmd

  1. 直接调用: called.bat
  2. 使用call命令: call called.bat
  3. 使用cmd命令: cmd /c called.bat
  4. 使用启动命令: start called.bat

根据他们的帮助文本,我很难区分他们的预期用法:何时使用哪一个? 例如,为什么我可能使用“呼叫”命令而不是直接呼叫。 有什么不同?

我对一些总结性报告感兴趣,这些报告从不同angular度分析了所有4种可能性(以及其他缺失的情况):推荐的用例,它们被devise为适合,处理产卵,执行上下文,环境,返回代码处理。

注意:我正在使用Windows XP SP3。

  1. 该batch file将由当前的cmd.exe实例执行(或者,例如,如果在资源pipe理器中双击,则会执行一个新的cmd.exe实例)。

  2. 与#1相同,只在批处理/ cmd文件中使用时才有效果。 在batch file中,如果没有“调用”,则会批处理父batch file并将其传递到调用的batch file; 用'call'运行子batch file,父batch file继续调用后面的语句。

  3. 在新的cmd.exe实例中运行batch file。

  4. 开始将在新的窗口中运行一个新的cmd.exe实例的batch file,调用者不会等待完成。

有一件事从这里的注释不清楚:当您通过使用其名称(原始问题中的案例#1)从另一个batch file调用另一个batch file时,执行停止从调用batch file。 例如,在这些行中:

 called.bat echo Hello 

'回声你好'行(和任何后面的)将不会被调用。 如果您使用“呼叫”关键字,则在呼叫后继续执行。 所以在这种情况下:

 call called.bat echo Hello 

'echo hello'行将被调用。

此外,在被调用的.bat文件中设置的所有variables也将被传回给调用进程。

想象一下,有一个'called.bat'文件有这样的一行:

 set MYVAR=hello 

然后,%MYVAR%将可用于调用batch file,如果它使用:

 call called.bat 

但是,它不会使用

 REM starts a new cmd.exe process start called.bat REM stops and replaces current cmd.exe process with a new one called.bat