批处理程序没有正常运行!

批处理程序没有正常运行!

我创建了一个批处理脚本(点击此处查看全文) 先启动一些服务,然后启动应用程序。应用程序完成后,批处理应该会启动,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

相关内容