如何在前一个进程自行终止后通过命令行启动程序?

How start a program via command line after the previous process terminated itself?

我 运行 通过命令行 notepad.exe 的程序。

在启动应用程序的任务完成后进程自行终止后,我需要通过命令行 运行 另一个程序,例如 winword.exe

所以我想要一个类似于调度程序的行为,在后台等待直到第一个进程完成,然后启动另一个进程。

我可以在 Windows 中实现吗?如果是,怎么做?

批处理文件解决方案

对于示例 Notepad.exeWinword.exe 解决方案非常简单,使用以下批处理文件:

@echo off
%SystemRoot%\Notepad.exe
start Winword.exe

Windows 命令解释器 cmd.exe 首先启动 Windows 记事本 并停止批处理文件的执行,直到 Notepad.exe 自行终止这意味着用户

  • 在键盘上按下 Alt+F4,或
  • 单击记事本标题栏右侧的X符号window,或
  • 在菜单 文件 中单击菜单项 退出,或
  • 双击记事本标题栏左侧的应用程序符号window,或
  • 记事本window标题栏左侧的应用程序符号上单击一次,然后在上一个应用程序上下文菜单项上单击下一步关闭.

然后 cmd.exe 的内部命令 START 用于在与 [=205 并行的单独进程中启动 Microsoft Word =] 命令过程。因此,cmd.exe 在执行 START 后立即继续批处理文件处理,而 Microsoft Word 是 运行 并行并退出,因为没有更多的命令行。

如果包含可执行文件的目录未包含在环境变量 PATH 中,则通常必须使用完整路径指定要启动的应用程序,如果路径包含 [=,则用双引号括起来=188=] 或这些字符之一 &()[]{}^=;!'+,`~。请查看 What is the reason for '...' is not recognized as an internal or external command, operable program or batch file? 以了解有关 Windows 命令解释器如何查找在命令行或批处理文件中指定的不带路径(且不带文件扩展名)的可执行文件和脚本的详细信息。所以最好是作为第二行:

start "" "%ProgramFiles(x86)%\Microsoft Office\Office14\Winword.exe"

此命令行启动 32 位 Microsoft Word 2010 安装在计算机 运行 64 位 Windows 的标准安装目录中。额外的空参数字符串 "" 是必需的,因为命令 START 否则会解释应用程序的完整限定名称以双引号括起来作为新控制台的标题 window.因此,命令 START 将为控制台 window 启动一个标题为 C:\Program Files (x86)\Microsoft Office\Office14\Winword.exe 的新命令进程,而无需明确指定空标题 "" 作为第一个参数。

为什么只使用 start Winword.exe 有效?

包含Winword.exe 的目录未包含在环境变量PATH 中。但只要安装了 Winword.exe,此命令行仍然会导致启动 Microsoft Word。原因是安装期间在 Windows 注册表中正确注册了应用程序 Winword.exe。因此,命令 START 能够找出 Winword.exe 的安装位置并执行它。有关其工作原理的详细信息,请参阅 Where is “START” searching for executables?

上的答案

批处理文件中的三行也可以优化为single line with multiple commands:

@%SystemRoot%\Notepad.exe & start Winword.exe

但是这个命令行不能直接在命令提示符中使用 window 因为 cmd.exe 在这种情况下执行 Windows 记事本Microsoft Word 并行。


命令行解决方案

直接在命令提示符 window 中使用的命令行解决方案是:

start /wait Notepad.exe & start Winword.exe

这会在一个单独的进程中使用命令 START 启动 Windows Notepad 并显式等待 [=16= 的终止] 因为在执行另一个 START 之前额外使用了 START 参数 /wait 来启动 Microsoft Word。这里不需要 "" 作为空标题字符串,因为此命令行中的参数字符串没有用双引号引起来。

但是这个命令行解决方案有一个缺点:只要Windows记事本是运行.

最好从当前命令提示符 window 开始一个最小化 window 的新命令进程,它首先执行 Windows 记事本 , 暂停命令行执行直到 Notepad 自行终止,然后启动 Microsoft Word 并在启动 Winword.exe 后立即退出。这可以通过以下命令行完成:

start "Notepad & Winword" /min cmd.exe /C "start /wait Notepad.exe & start Winword.exe"

此命令行导致 cmd.exe 作为单独的进程启动,由于命令 START[=137= 的选项 /min,控制台 window 被最小化],带有控制台 window 标题 Notepad & Winword,由于 CMD 的选项 /C,在第一次启动后 Notepad.exe 和在开始之前等待 Notepad 终止 Winword.exe 不等待终止。

好吧,带有标题 Notepad & Winword 的额外的最小化控制台 window 实际上对用户没有用处。因此更好的是命令行:

start "" /B cmd.exe /C "start /wait Notepad.exe & start Winword.exe"

附加命令进程在thi启动没有 window 的情况(在后台),因为使用了命令 START 的选项 /B。此处指定了一个空标题,因为根本没有显示控制台 window。

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • cmd /?
  • echo /?
  • start /?