从另一个或从提示符调用 Windows 批处理文件的几种方法。哪种情况下?
Posted
技术标签:
【中文标题】从另一个或从提示符调用 Windows 批处理文件的几种方法。哪种情况下?【英文标题】:Several ways to call a windows batch file from another one or from prompt. Which one in which case? 【发布时间】:2011-02-06 03:54:33 【问题描述】:可以从另一个批处理文件(caller.bat
或caller.cmd
)或交互式 cmd.exe 提示符以多种方式调用 Windows 批处理文件(called.bat
或 called.cmd
):
-
直接拨打:
called.bat
使用调用命令:call called.bat
使用cmd命令:cmd /c called.bat
使用启动命令:start called.bat
我很难根据帮助文本区分它们的预期用途:何时使用哪个?例如为什么我可能会使用“呼叫”命令而不是直接呼叫。有什么不同?
我对一些总结报告感兴趣,该报告从不同的角度分析了所有 4 种可能性(以及其他可能性,如果有任何缺失):推荐的使用案例,它们被设计为适合、进程生成、执行上下文、环境、返回代码处理。
注意:我使用的是 Windows XP SP3。
【问题讨论】:
【参考方案1】:批处理文件将由当前的 cmd.exe 实例(或新的 cmd.exe 实例,例如,在资源管理器中双击)执行。
与 #1 相同,仅在批处理/cmd 文件中使用时有效。在批处理文件中,如果没有“调用”,则父批处理文件结束并将控制权传递给被调用的批处理文件; with 'call' 运行子批处理文件,父批处理文件继续执行调用后的语句。
在新的 cmd.exe 实例中运行批处理文件。
Start 将在新窗口中的新 cmd.exe 实例中运行批处理文件,调用者不会等待完成。
【讨论】:
注意选项4,启动命令should always be followed by a 'title',所以如果你不需要标题,你应该有空的双引号,例如start "" [options] command
@Daryn 该链接仅提到您应该始终拥有一个,但甚至表示 Microsoft 将该参数描述为可选。他们没有告诉我为什么它应该是“必需的”。甚至他们在底部的几个示例都省略了标题参数。【参考方案2】:
这里的 cmets 不清楚一件事:当您仅使用其名称从另一个批处理文件调用一个批处理文件时(原始问题中的案例 #1),从调用批处理文件执行停止。例如,在这些行中:
called.bat
echo Hello
不会调用'echo Hello' 行(以及它后面的任何内容)。如果您使用“call”关键字,则在调用后继续执行。所以在这种情况下:
call called.bat
echo Hello
将调用“echo Hello”行。
此外,在被调用的.bat 文件中设置的所有变量也将传递回调用进程。
想象一个包含这一行的“called.bat”文件:
set MYVAR=hello
然后,调用批处理文件可以使用 %MYVAR%:
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
【讨论】:
以上是关于从另一个或从提示符调用 Windows 批处理文件的几种方法。哪种情况下?的主要内容,如果未能解决你的问题,请参考以下文章
从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口