Como você espera que um exe seja concluído em um arquivo de lote?

39

Estou tentando criar um script para executar um exe no desligamento para instalar o sp1. meu script é algo como (script de morcego não real).

If installed GOTO END
    Install.exe
END:

Meu problema é que, quando executado, ele inicia o instalador e conclui o script porque o processo do instalador é diferente e segue fechando o processo de instalação porque o computador está desligando e desligando o sistema (pelo menos, isso é o que eu acho que está fazendo.)

Existe alguma maneira de dizer que aguarde até que o processo iniciado seja concluído e encerrado?

    
por Kravlin 09.03.2011 / 21:46

6 respostas

75

Tente executar

START /WAIT Install.exe
    
por 09.03.2011 / 21:54
20

Um caminho mais curto:

Install.exe|more

install|rem

pode ser usado, embora com mais tempo você consiga capturar alguma saída do console. E esta é a razão pela qual ele funciona - o comando canalizado aguarda a entrada até que o .exe termine

    
por 22.10.2015 / 14:34
10

Chamar o exe diretamente do arquivo de lote ou usar start /wait funcionará, mas há uma ressalva.

Se o exe que você chamar criar outro processo, como chamar outro exe e, em seguida, sair, o arquivo em lote continuará o processamento depois que o exe chamado tiver terminado, pois não tem conhecimento de outros processos iniciados por ele.

No seu caso, este é um problema real, pois os instaladores normalmente extraem arquivos de alguma forma de contêiner compactado, que pode estar embutido no próprio exe, depois disparar um dos arquivos extraídos e sair. Alguns instaladores fornecem parâmetros de linha de comando que dizem ao exe original para não sair até que toda a instalação seja concluída, então isso é algo que você pode querer investigar. Fora isso, não há nenhuma maneira real de contornar isso apenas com arquivos em lote e ter uma solução programática para resolver.

    
por 09.03.2011 / 22:25
3

Aqui está um exemplo usando o MATLAB! Assumi que a configuração do caminho para o MATLAB está concluída e a saída do MATLAB está sendo assegurada pelo arquivo FileName.m (ou o usuário especificou internamente).

echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit
    
por 19.06.2014 / 14:46
0

Você pode usar o comando start / wait. Isso inicia um aplicativo e aguarda que termine.

Ou se você sabe quanto tempo demora para executar, você pode dar uma olhada no comando sleep, fornecido pelo Ferramentas do Resource Kit do Windows Server 2003 . Sleep.exe pode ser usado para pausar seu lote por qualquer número de segundos para permitir que o programa seja instalado completamente antes que o arquivo em lotes continue instalando qualquer outra coisa. Existem alguns programas que ignoram a sintaxe "start / wait", devido ao próprio programa iniciar outro processo, então o sleep.exe é muito útil.

    
por 09.03.2011 / 22:03
0

Eu tive o problema @John Gardeniers Had ou descrevi, onde meu exe chamou outro exe e terminou, portanto start / wait não funcionou. Eu criei um "loop while" para verificar se ele está sendo executado e, em seguida, seguir em frente assim que estiver pronto. Os horários podem ser ajustados para atender às suas necessidades.

TIMEOUT /T 60

SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
goto FIN
:FOUND
TIMEOUT /T 30
goto LOOPSTART
:FIN
    
por 15.03.2018 / 03:21