Como é o comando START com uma opção WAIT
START /wait notepad.exe
START /wait notepad.exe
... diferente de usar um comando CALL?
CALL notepad.exe
CALL notepad.exe
Existe uma situação em que um pode se comportar de maneira diferente que o outro depende do que está sendo executado?
windows
batch-file
Chade
fonte
fonte
Respostas:
Para arquivos exe , suponho que as diferenças sejam quase sem importância.
Mas para iniciar um exe você nem precisa
CALL
.Ao iniciar outro lote, é uma grande diferença,
pois ele
CALL
será iniciado na mesma janela e o lote chamado terá acesso ao mesmo contexto de variável.Por isso, também pode alterar variáveis que afetam o chamador.
START
criará um novo cmd.exe para o lote chamado e sem / b abrirá uma nova janela.Como é um novo contexto, as variáveis não podem ser compartilhadas.
Diferenças
Usando
start /wait <prog>
- Alterações nas variáveis de ambiente são perdidas quando o
<prog>
término- O chamador espera até que o
<prog>
término seja concluídoUsando
call <prog>
- Para exe , pode ser omitido, porque é igual a apenas iniciar
<prog>
- Para um exe-prog, o lote do chamador aguarda ou inicia o exe assíncrono, mas o comportamento depende do próprio exe .
- Para arquivos em lote , o lote do chamador continua quando a chamada
<batch-file>
terminar, SEM chamar o controle, não retornará ao lote do chamador.Termo aditivo:
O uso
CALL
pode alterar os parâmetros (para arquivos em lote e exe), mas somente quando eles contêm sinais de intercalação ou sinais de porcentagem.Será expandido para (de dentro de um arquivo em lotes)
fonte
start /wait /b cmd /c <batchfile.bat>
porque os arquivos em lote executar um após o outro na mesma janela de comandocall batchfile.bat
Eu acho que eles devem executar geralmente o mesmo, mas existem algumas diferenças.
START
geralmente é usado para iniciar aplicativos ou para iniciar o aplicativo padrão para um determinado tipo de arquivo. Dessa forma, se vocêSTART http://mywebsite.com
não fizerSTART iexplore.exe http://mywebsite.com
.START myworddoc.docx
iniciaria o Microsoft Word e abriria myworddoc.docx.CALL myworddoc.docx
faz a mesma coisa ... no entanto,START
fornece mais opções para o estado da janela e coisas dessa natureza. Também permite que a prioridade e a afinidade do processo sejam definidas.Em resumo, dadas as opções adicionais fornecidas pelo início, essa deve ser a sua ferramenta de escolha.
fonte
Há uma diferença útil entre
call
estart /wait
ao ligar,regsvr32.exe /s
por exemplo, também referenciado por Gary em sua resposta a como fazer o código de saída do aplicativo a partir da linha de comando do Windowssempre retornará 0, mas
retornará o nível de erro de regsvr32.exe
fonte
Foi o que descobri ao executar arquivos em lote em paralelo (várias instâncias do mesmo arquivo bat ao mesmo tempo com diferentes parâmetros de entrada):
Vamos dizer que você tem um arquivo exe que executa uma tarefa longa chamada LongRunningTask.exe
Se você chamar o exe diretamente do arquivo bat, apenas a primeira chamada para o LongRunningTask será bem-sucedida, enquanto o restante receberá um erro do SO "O arquivo já está sendo usado pelo processo"
Se você usar este comando:
start / B / WAIT "" "LongRunningTask.exe" "" parâmetros "
Você poderá executar várias instâncias do bastão e exe, enquanto aguarda a conclusão da tarefa antes que o bastão continue executando os comandos restantes. A opção / B é para evitar a criação de outra janela; as aspas vazias são necessárias para que o comando funcione, consulte a referência abaixo.
Observe que, se você não usar o / WAIT no início, o LongRunningTask será executado ao mesmo tempo que os comandos restantes no arquivo em lotes, portanto, poderá criar problemas se um desses comandos exigir a saída do LongRunningTask
Retomar :
Isso não pode ser executado em paralelo:
Isso será executado em paralelo e ficará ok, desde que não haja dependências de dados entre a saída do comando e o restante do arquivo bat:
Isso será executado em paralelo e aguardará a conclusão da tarefa, para que você possa usar a saída:
Referência para o comando start: Como executar um programa a partir de um arquivo em lotes sem deixar o console aberto após o início do programa?
fonte
Ligar
Chama um programa em lote de outro sem interromper o programa em lote pai. O comando call aceita rótulos como o destino da chamada. A chamada não tem efeito na linha de comando quando usada fora de um script ou arquivo em lotes. https://technet.microsoft.com/en-us/library/bb490873.aspx
Começar
Inicia uma janela separada do prompt de comando para executar um programa ou comando especificado. Usado sem parâmetros, o start abre uma segunda janela do prompt de comando. https://technet.microsoft.com/en-us/library/bb491005.aspx
fonte
Este é um tópico antigo, mas acabei de encontrar essa situação e descobri uma maneira elegante de contorná-la. Eu estava tentando executar um setup.exe, mas o foco estava voltando para a próxima linha do script sem esperar pela conclusão do setup.exe. Eu tentei as soluções acima sem sorte.
No final, canalizar o comando através de mais funcionou.
setup.exe {argumentos} | Mais
fonte