Estou tentando executar alguns comandos em lote simples em um lote.
Aliás, cada comando é um comando em lote da seguinte forma:
rails generate scaffold illness name:string
rails generate scaffold ingredient name:string origin_id:integer
Agora, em vez de executar todos os 30 comandos, meu arquivo em lote executa apenas o primeiro e retorna à linha de prompt. Então eu tenho que executá-lo manualmente.
Responder1
Você tem que colocar a palavra call
na frente do arquivo em lote ...
@eco desligado chamar rails gerar nome da doença do andaime: string chamar ralis gerar nome do ingrediente do andaime: string origin_id: inteiro
Isso pressupõe que "rails" seja realmente rails.bat.
Responder2
Embora a resposta anterior de jftuga esteja correta, a resposta mais completa é a seguinte:
@echo off
call rails generate scaffold illness name:string
call ralis generate scaffold ingredient name:string origin_id:integer
Você tem que colocar umchamarna frente de cada linha no arquivo em lote é um comando externo que aciona um novo processo se você deseja que o script continue após cada chamada. Portanto, comandos internos como DIR e COPY não requerem chamada. Mas executando um novo prompt de comando ou mesmo outro arquivo em lote, o controle é transferido completamente para esse programa, a menos que a palavraCHAMARestá na frente da fila. Na verdade, o novo prompt de comando devolverá o controle ao arquivo em lote assim que vocêSaídaisto.
Alguns programas serão pausados enquanto são executados, mas retornarão para a próxima linha do arquivo em lote após serem concluídos. No arquivo em lote a seguir, o script fará uma pausa após cada chamada do Bloco de Notas e começará após a saída do Bloco de Notas (ambas as vezes). Portanto, eles são efetivamente iguais.
notepad.exe
call notepad.exe
echo It came back.
Mas ao chamar outro arquivo em lote, o controle completo é passado para o novo processo, a menos que haja uma chamada na frente. Portanto, no código a seguir, a primeira chamada de um arquivo bat retornará quando concluída, mas a segunda nunca retornará, portanto a última linha de eco nunca será executada. chame firstBatch.bat SecondBatch.bat echo Você nunca verá esta linha
Não tenho certeza de como funciona o comando rails, mas parece ser uma sessão em lote. Talvez fosse um arquivo em lote. As duas primeiras chamadas para cmd não retornarão até que você digite exit nessa instância, retornando ao shell anterior. Ochamaré irrelevante. Mas o terceiro usa a opção /c, que diz para executar o comando e retornar automaticamente. Se quiser manter a nova sessão cmd ativa depois de enviar um comando, use a opção /K. Para obter mais ajuda sobre isso:cmd /?
cmd
call cmd
cmd /c dir
echo You will see this after typing Exit twice to leave two new instances of cmd. The third instance returned automatically.