从另一个或从提示符调用 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.batcaller.cmd)或交互式 cmd.exe 提示符以多种方式调用 Windows 批处理文件(called.batcalled.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命令大全。谢谢各位电脑大虾。。。。

从另一个文件中快速调用完成处理程序失败

启动关联程序或从另一个程序显示“打开方式”对话框

从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口

从另一个 .swift 文件调用 ViewController 函数

Python和PySide:从另一个文件调用函数时变量值重置