Respuestas:
Es posible que ya encuentre su respuesta porque fue hace algún tiempo que la solicitó. Pero intenté hacer algo similar al codificar ror. Quería ejecutar "rails server" en una nueva ventana de cmd para no tener que abrir un nuevo cmd y luego encontrar mi ruta nuevamente.
Lo que descubrí fue usar el interruptor K de esta manera:
start cmd /k echo Hello, World!
comience antes de que "cmd" abra la aplicación en una nueva ventana y "/ K" ejecute "echo Hello, World!" después de que el nuevo cmd esté activo.
También puede usar el modificador / C para algo similar.
start cmd /C pause
Esto ejecutará "pausa" pero cerrará la ventana cuando termine el comando. En este caso después de presionar un botón. Encontré esto útil para el "servidor de rieles", luego cuando apago mi servidor dev no tengo que cerrar la ventana después.
Use lo siguiente en su archivo por lotes:
start cmd.exe /k "more-batch-commands-here"
o
start cmd.exe /c "more-batch-commands-here"
/ c Ejecuta el comando especificado por cadena y luego termina
/ k Ejecuta el comando especificado por cadena pero permanece
Consulte la documentación de cmd.exe utilizando cmd /?
para obtener más detalles.
El formateo adecuado de la cadena de comandos se vuelve un poco más complicado con espacios en los argumentos. Vea los ejemplos a continuación. Tenga en cuenta el uso de comillas dobles anidadas en algunos ejemplos.
Ejemplos:
Ejecute un programa y pase un parámetro de nombre de archivo:
CMD /c write.exe c:\docs\sample.txt
Ejecute un programa y pase un nombre de archivo largo:
CMD /c write.exe "c:\sample documents\sample.txt"
Espacios en la ruta del programa:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""
Espacios en la ruta del programa + parámetros:
CMD /c ""c:\Program Files\demo.cmd"" Parameter1 Param2
CMD /k ""c:\batch files\demo.cmd" "Parameter 1 with space" "Parameter2 with space""
Inicie demo1 y demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""
Fuente: http://ss64.com/nt/cmd.html
Esto no es muy fácil.
El mejor enfoque es tener la parte de su script que desea que se ejecute en una "nueva ventana" para que esté en un archivo .bat separado. Esto podría no ser práctico si, por ejemplo, necesita mucho estado del resto de su script (variables, etc.). Una opción es pasar cualquier valor que necesite (por ejemplo, dir para operar) al archivo por lotes:
start cmd.exe stuff.bat %this_dir%
Si tiene una gran cantidad de estado para transmitir, puede considerar generar un archivo por lotes en tiempo de ejecución:
set foo=Hello, World
set list_me=%userprofile%
set tmpdir=c:\windows\temp
set tmp=%tmpdir%\tmp.foo
del /q /f "%tmp%"
echo.echo %foo%>>"%tmp%"
echo.dir "%list_me%">>>"%tmp"
start cmd.exe "%tmp%"
del /q /f "%tmp%"
Obviamente este es un ejemplo trivial.
Las respuestas anteriores me ayudaron. Pero todavía requería un poco de comprensión. Aquí hay un script de ejemplo que uso para iniciar 3 procesos para el desarrollo web. Resulta en 3 ventanas que permanecen abiertas, ya que necesitan ejecutarse continuamente.
Mongo se ha agregado globalmente a mi camino, por lo que no necesito hacer un CD como lo hago para los otros dos programas. Por supuesto, la ruta a sus archivos variará, pero espero que esto ayude.
:: Start MongoDB
start cmd.exe /k "mongod"
:: cd app directory, and start it
cd my-app
start cmd.exe /k "npm run dev"
:: cd to api server, and start that
cd ../my-app-api
start cmd.exe /k "npm run dev"
Gracias a todos aquí en Stack Overflow; Esta solución resuelve la pregunta anterior, pero se extiende para ejecutar automáticamente estas tareas:
Supongo que mi proyecto se llama "anticuario".
Cree un archivo "init.bat" en su directorio % USERPROFILE% (abra una ventana de cmd y eche un vistazo a la ruta a la izquierda del cursor para saber qué es% USERPROFILE%)
@echo off
cd C:/projects/rails3/antiquorum
if "%1" == "antiquorum" GOTO start
if "%1" == "worker" GOTO worker
if "%1" == "server" GOTO server
if "%1" == "" GOTO end
:start
start cmd /k %USERPROFILE%\init.bat worker
start cmd /k %USERPROFILE%\init.bat server
TIMEOUT 30
start "" "http://localhost:3000/"
GOTO end
:server
rails s
GOTO end
:worker
rake jobs:work
:end
En una nueva ventana de línea de comando, escriba: C:> init antiquorum
El código abre dos ventanas cmd más y un navegador. TIMEOUT evita errores en el navegador.
La sección : inicio hace el trabajo. Puede ejecutar las tareas 1,2 o 4 por separado escribiendo parámetros como: servidor , trabajador o ninguno para dejar un cmd abierto en la raíz del proyecto "anticuario" .
Disfrutar.
Si entiendo que está haciendo esto correctamente, su archivo bat abrirá el símbolo del sistema e imprimirá su mensaje en la pantalla.
cmd.exe hello world
espero que esto ayude.
Agregar entre dos comandos ejecuta ambos comandos ./k
in order
Ejemplo:
cmd /k echo "hello"
este comando se abrirá primero y command prompt
luego ejecutará el echo "hello"
comando
cmd
. Solo puedes escribirstart rails s
.