我通过命令行运行notepad.exe
之类的程序。
在完成启动的应用程序的任务后进程终止后,我需要通过命令行运行另一个程序,例如winword.exe
。
所以我希望像调度程序这样的行为,在后台等待完成第一个进程,然后启动另一个进程。
我能在Windows中实现这一目标吗?如果是的话,怎么样?
答案 0 :(得分:1)
对于示例Notepad.exe
和Winword.exe
,以下批处理文件的解决方案非常简单:
@echo off
%SystemRoot%\Notepad.exe
start Winword.exe
Windows命令解释程序cmd.exe
首先启动 Windows记事本并暂停执行批处理文件,直到Notepad.exe
终止自身,这意味着用户
然后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 /?