Os comandos são executados em um arquivo de lote somente ao gravar cmd / c antes

1

Estou executando o seguinte comando

rabbitmq-server.bat" -detached

Este comando executa um sewrver em segundo plano. Quando eu o executo a partir de arquivos em lote - o fluxo pára e os comandos posteriores no lote param de ser executados.

  1. Por quê?
  2. Qual é a melhor maneira de executar esse tipo de comando?
  3. Executá-los com cmd / c faz o trabalho, mas não para todos esses comandos
por Bick 04.02.2014 / 16:57

2 respostas

1

Esse é o comportamento idiota que o CMD da Microsoft mantém para compatibilidade com versões anteriores desde as primeiras versões do COMMAND da Microsoft. Se um script de comando executar outro script de comando, o primeiro script de comando será cancelado.

A maneira de contornar isso é com o comando interno call . Basta prefixar o script de comando com call . Isso gera o comportamento que você, e suspeito que a maioria das pessoas, espera: o script de comando de chamada retoma a execução quando o script de comando chamado termina.

Você também pode usar cmd /c , mas observe que isso não é a mesma coisa. call apenas aninha os scripts de comando no mesmo interpretador de comandos. cmd /c inicia um novo subprocesso do interpretador de comandos. Alterações feitas em variáveis, no diretório de trabalho, em identificadores de arquivos abertos e afins no subprocesso não afetarão seu pai. Por outro lado, call é portável, caso um esteja usando intérpretes de comando de substituição, enquanto cmd une um a um interpretador de comandos específico.

Leitura adicional

  • Software JP. CALL . Take Command / TCC Help.
  • "CALL" . Referência de linha de comando do Windows XP A – Z. TechNet. Corporação Microsoft.
por 04.02.2014 / 22:13
0

Este é provavelmente um caso para usar o "Start.exe"

Iniciar permitirá que você inicie o processo do servidor em uma janela separada e deixe-o em execução.

O script em lote original continuará executando os comandos no script sem esperar que o processo do servidor termine.

Embora esses comandos não afetem esse processo de execução separadamente, no entanto, como é provável o caso, você pode usar alguns comandos destinados a interagir com o Rabit MQ Server na próxima parte do script em lote e eles funcionarão corretamente.

Contanto que você coloque uma pausa de tamanho suficiente a partir do momento em que o comando START for executado até o momento em que os comandos do cliente forem iniciados para dar ao servidor rabbit tempo suficiente para instanciar completamente. (Isso pode ser feito com uma pausa na qual você pressiona manualmente para continuar ou um ping para ter um temporizador.)

Usar "CALL" ou "CMD / C" sem "Iniciar" fará com que o script em lote espere até que você finalize a execução do comando do servidor RabitMQ antes de continuar.

    
por 26.01.2018 / 20:23