我创建了一个批处理脚本(点击此处查看全文) 先启动一些服务,然后启动应用程序。应用程序完成后,批处理应该会启动,GOTO somewhere
但它正在等待程序退出,然后继续下一步。
启动应用程序并继续的标头:
:vmSTARTAPP
"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
IF NOT %BACK%==NULL GOTO %BACK%
GOTO STARTAPPCONT
该标头是从另一个标头调用的:
:STARTAPP
cls
echo Starting Application
GOTO %BATCH%
%BATCH%
包含下一个标题的名称 - 在上面的情况下为vmSTARTAPP
。
如果我从新的命令提示符窗口运行它,它可以正常工作,但不在此批次中。
我究竟做错了什么?
PS:不要将这个问题与我之前的问题联系起来。这是一个完全不同的案例。
答案1
您能否尝试替换显示以下内容的行
:vmSTARTAPP
"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
和
:vmSTARTAPP
start "Starting VMWare" /B "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
我假设您想静默启动 VMWare 并继续运行而不停止,理论上这应该可以做到这一点。
该start
命令指示 DOS 运行您传递给它的命令(在本例中为“C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe”),并且默认情况下不会等待您传递给它的命令返回,而是在单独的进程中运行它。
默认情况下,批处理文件中的每一行都是按顺序运行的,并等待每一行执行并返回后再继续执行下一行。该start
命令通过在单独的进程(DOS 窗口)中启动您传递给它的程序来解决这个问题,因此您的批处理文件遇到此行时,会像往常一样运行它,看到命令start
已返回(在创建新进程来运行您的命令之后),并且您的批处理文件会继续运行,就像没有发生任何意外一样。
标题"Starting VMWare"
就是一个标题,如果没有参数/B
告诉它不显示新的 DOS 窗口,新创建的 DOS 窗口就会有这个标题。标题是必要的,但也是可选的,我偶尔会在没有标题的脚本中遇到 WTF 时刻,但这些时候更多是例外,而不是规则。
您可以在以下位置找到有关“开始”命令的更多信息http://ss64.com/nt/start.html