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

时间:2018-03-30 07:33:25

标签: windows batch-file cmd scheduler

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

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

所以我希望像调度程序这样的行为,在后台等待完成第一个进程,然后启动另一个进程。

我能在Windows中实现这一目标吗?如果是的话,怎么样?

1 个答案:

答案 0 :(得分:1)

批处理文件解决方案

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

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

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

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

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

如果包含可执行文件的目录未包含在环境变量 PATH 中,则必须通常使用完整路径指定要启动的应用程序,如果路径包含空格或其中一个字符,则用双引号括起来&()[]{}^=;!'+,`~。请查看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"

此命令行启动安装在运行64位Windows的计算机上的标准安装目录中的32位 Microsoft Word 2010 。附加的空参数字符串""是必需的,因为命令 START 会解释为启动用双引号括起来的应用程序的完整限定名称作为新控制台窗口的标题。因此命令 START 将启动一个新的命令进程,其控制台窗口标题为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

但是这个单一的命令行不能直接在命令提示符窗口中使用,因为cmd.exe在这种情况下执行 Windows Notepad Microsoft Word 平行。

命令行解决方案

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

start /wait Notepad.exe & start Winword.exe

这将使用命令 START 在单独的进程中启动 Windows Notepad ,明确等待Notepad.exe的终止,因为另外使用 START 参数/wait再执行一次 START 以启动 Microsoft Word 。这里不需要""作为空标题字符串,因为此命令行中没有参数字符串用双引号括起来。

但是这个命令行解决方案有一个缺点:只要 Windows Notepad 正在运行,命令提示符窗口就无法继续使用。

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

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

此命令行导致cmd.exe作为单独的进程启动,控制台窗口由于命令 START 的选项/min而被最小化,控制台窗口标题为{{ 1}},由于 CMD 的选项Notepad & Winword而关闭,在首次启动/C并等待记事本终止后才开始{{1}不等待终止。

嗯,标题为Notepad.exe的额外的,最小化的控制台窗口实际上没有用户使用。因此命令行会更好:

Winword.exe

由于使用了命令 START 的选项Notepad & Winword,在这种情况下启动了附加命令进程,没有窗口(在后台)。此处指定了空标题,因为根本没有显示控制台窗口。

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

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