Tener problemas para escribir una lista de comandos simples en un archivo por lotes

Tener problemas para escribir una lista de comandos simples en un archivo por lotes

Estoy intentando ejecutar algunos comandos por lotes simples en un solo lote.
De hecho, cada comando es un comando por lotes de la siguiente manera:

 rails generate scaffold illness name:string
 rails generate scaffold ingredient name:string origin_id:integer

Ahora, en lugar de ejecutar los 30 comandos, mi archivo por lotes ejecuta solo el primero y regresa a la línea del mensaje. Entonces tengo que ejecutarlo manualmente.

Respuesta1

Tienes que colocar la palabra calldelante del archivo por lotes...

@eco apagado
los rieles de llamada generan nombre de enfermedad de andamio: cadena
llamar a ralis generar nombre del ingrediente del andamio: cadena origin_id: entero

Esto supone que "rails" es en realidad rails.bat.

Respuesta2

Si bien la respuesta anterior de jftuga es correcta, la respuesta más completa es la siguiente:

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

Tienes que colocar unllamardelante de cada línea en el archivo por lotes, hay un comando externo que desencadena un nuevo proceso si desea que el script continúe después de cada llamada. Por lo tanto, los comandos internos como DIR y COPY no requieren una llamada. Pero al ejecutar un nuevo símbolo del sistema o incluso otro archivo por lotes, el control se transfiere completamente a ese programa, a menos que la palabraLLAMARestá al frente de la fila. En realidad, el nuevo símbolo del sistema devolverá el control al archivo por lotes una vez queSalidaél.

Algunos programas se detendrán mientras se ejecutan, pero volverán a la siguiente línea del archivo por lotes una vez completado. En el siguiente archivo por lotes, la secuencia de comandos se detendrá de la misma manera después de cada llamada del Bloc de notas y comenzará después de que el Bloc de notas haya salido (ambas veces). Entonces son efectivamente lo mismo.

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

Pero cuando se llama a otro archivo por lotes, se pasa el control total al nuevo proceso a menos que haya una llamada al frente. Entonces, en el siguiente código, la primera llamada de un archivo bat regresará cuando se complete, pero la segunda nunca regresará, por lo que la última línea de eco nunca se ejecutará. call firstBatch.bat SecondBatch.bat echo Nunca verás esta línea

No estoy seguro de cómo funciona el comando Rails, pero parece ser una sesión por lotes. Quizás fue un archivo por lotes. Las dos primeras llamadas a cmd no volverán hasta que escriba exit en esa instancia, lo que lo devolverá al shell anterior. Elllamares irrelevante. Pero el tercero usa el modificador /c, que dice que se ejecute el comando y regrese automáticamente. Si desea mantener activa la nueva sesión de cmd después de enviarle un comando, utilice el modificador /K. Para obtener más ayuda sobre esto: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.

información relacionada