从另一个或从提示调用Windowsbatch file的几种方法。 哪一个在哪种情况下?
Windowsbatch file( called.bat
或called.cmd
)可以通过多种方式从另一batch file( caller.bat
或caller.cmd
)或交互式cmd.exe提示中caller.cmd
:
- 直接调用:
called.bat
- 使用call命令:
call called.bat
- 使用cmd命令:
cmd /c called.bat
- 使用启动命令:
start called.bat
根据他们的帮助文本,我很难区分他们的预期用法:何时使用哪一个? 例如,为什么我可能使用“呼叫”命令而不是直接呼叫。 有什么不同?
我对一些总结性报告感兴趣,这些报告从不同angular度分析了所有4种可能性(以及其他缺失的情况):推荐的用例,它们被devise为适合,处理产卵,执行上下文,环境,返回代码处理。
注意:我正在使用Windows XP SP3。
-
该batch file将由当前的cmd.exe实例执行(或者,例如,如果在资源pipe理器中双击,则会执行一个新的cmd.exe实例)。
-
与#1相同,只在批处理/ cmd文件中使用时才有效果。 在batch file中,如果没有“调用”,则会批处理父batch file并将其传递到调用的batch file; 用'call'运行子batch file,父batch file继续调用后面的语句。
-
在新的cmd.exe实例中运行batch file。
-
开始将在新的窗口中运行一个新的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