Tendo problemas para escrever uma lista de comandos simples em um arquivo em lote

Tendo problemas para escrever uma lista de comandos simples em um arquivo em lote

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 callna 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.

informação relacionada