Tendo problemas ao gravar uma lista de comandos simples em um arquivo de lote

1

Estou tentando executar alguns comandos em lote simples em um lote.
Para esse assunto, 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 de lote executa somente o primeiro e retorna para a linha de prompt. Então eu tenho que executá-lo manualmente.

    
por Bick 27.04.2012 / 21:20

2 respostas

4

Você tem que colocar a palavra call na frente do arquivo de lote ...

@echo off
call rails generate scaffold illness name:string
call ralis generate scaffold ingredient name:string origin_id:integer

Isto assume que "rails" é realmente rails.bat.

    
por 27.04.2012 / 21:39
4

Enquanto a resposta anterior do jftuga estiver 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ê precisa colocar uma chamada na frente de cada linha no arquivo em lote que é um comando externo que aciona um novo processo se você quiser que o script continue após cada chamada. Portanto, comandos internos como DIR e COPY não requerem uma chamada. Mas executando um novo prompt de comando ou até mesmo outro arquivo de lote, o controle é entregue completamente para esse programa, a menos que a palavra CALL esteja na frente da linha. Na verdade, o novo prompt de comando retornará o controle para o arquivo em lote assim que você sair dele.

Alguns programas fazem uma pausa enquanto são executados, mas retornam à próxima linha do arquivo de lote após a conclusão. No arquivo de lote a seguir, o script fará uma pausa após cada chamada do Bloco de Notas e começará depois que o Bloco de Notas for encerrado (ambas as vezes). Então eles são efetivamente o mesmo.

notepad.exe
call notepad.exe
echo    It came back.

Mas ao chamar outro arquivo de 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     eco Você nunca verá esta linha

Não tenho certeza de como o comando rails funciona, mas parece ser uma sessão em lote. Talvez tenha sido um arquivo em lotes. As duas primeiras chamadas para o cmd não retornarão até que você digite exit nessa instância, retornando ao shell anterior. A chamada é irrelevante. Mas o terceiro usa a opção / c, que diz para executar o comando e retornar automaticamente. Se você deseja manter a nova sessão cmd ativa depois de enviar um comando, use a opção / K. Para 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.
    
por 29.04.2012 / 22:05