
Eu criei um script em lote (veja na íntegra aqui) para iniciar primeiro alguns serviços e depois um aplicativo. Depois que o aplicativo for concluído, o lote deverá fazê-lo, GOTO somewhere
mas estará aguardando a saída do programa para continuar.
Cabeçalho para iniciar o aplicativo e prosseguir:
:vmSTARTAPP
"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
IF NOT %BACK%==NULL GOTO %BACK%
GOTO STARTAPPCONT
Este cabeçalho é chamado de outro cabeçalho:
:STARTAPP
cls
echo Starting Application
GOTO %BATCH%
%BATCH%
contém o nome do próximo cabeçalho - no caso acima, vmSTARTAPP
.
Se eu executá-lo em uma nova janela do prompt de comando, ele funcionará bem, mas não neste lote.
O que estou fazendo de errado?
PS Não encaminhe esta questão para a minha pergunta anterior. Este é um caso completamente diferente.
Responder1
Você poderia tentar substituir suas linhas que mostram
:vmSTARTAPP
"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
com
:vmSTARTAPP
start "Starting VMWare" /B "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
Presumo que você queira iniciar o VMWare silenciosamente e continuar sem parar e isso deveria, em teoria, fazer isso.
O start
comando instrui o DOS a executar o comando que você está passando para ele (neste caso "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe") e por padrão não espera pelo comando que você passa retornar e, em vez disso, executa-o em um processo separado.
Por padrão, cada linha que você possui em um arquivo em lote é executada sequencialmente e aguarda a execução e o retorno de cada linha antes de passar para a próxima linha. O start
comando contorna isso iniciando o programa que você passa em um processo separado (janela DOS) e assim seu arquivo em lote encontra esta linha, executa-o normalmente, vê que o start
comando retornou (depois de criar um novo processo para executar seu comando in) e seu arquivo em lote continua como se nada inesperado tivesse acontecido.
O "Starting VMWare"
título é simplesmente isso, um título, a janela do DOS recém-criada teria esse título se não fosse pelo /B
argumento que lhe diz para não mostrar a nova janela do DOS. O título é meio necessário, mas meio opcional, e ocasionalmente tive momentos WTF em scripts sem ele, mas esses momentos são mais exceção do que regra.
Você pode encontrar um pouco mais de informações sobre o comando Iniciar emhttp://ss64.com/nt/start.html