Risposte:
Potresti già trovare la tua risposta perché è stato chiesto qualche tempo fa. Ma ho provato a fare qualcosa di simile durante la programmazione di ror. Volevo eseguire "rails server" in una nuova finestra cmd in modo da non dover aprire un nuovo cmd e ritrovare il mio percorso.
Quello che ho scoperto è stato usare l'interruttore K in questo modo:
start cmd /k echo Hello, World!
inizia prima che "cmd" aprirà l'applicazione in una nuova finestra e "/ K" eseguirà "echo Hello, World!" dopo che il nuovo cmd è attivo.
Puoi anche usare l'opzione / C per qualcosa di simile.
start cmd /C pause
Questo eseguirà quindi "pausa" ma chiuderà la finestra al termine del comando. In questo caso dopo aver premuto un pulsante. L'ho trovato utile per "rails server", quindi quando spengo il mio server dev non devo più chiudere la finestra.
Utilizzare quanto segue nel file batch:
start cmd.exe /k "more-batch-commands-here"
o
start cmd.exe /c "more-batch-commands-here"
/ c Esegue il comando specificato dalla stringa e quindi termina
/ k Esegue il comando specificato dalla stringa ma rimane
Consultare la documentazione di cmd.exe utilizzando cmd /?per ulteriori dettagli.
La corretta formulazione della stringa di comando diventa un po 'più complicata con gli spazi negli argomenti. Vedi gli esempi di seguito. Si noti l'uso di virgolette doppie nidificate in alcuni esempi.
Esempi:
Esegui un programma e passa un parametro nomefile:
CMD /c write.exe c:\docs\sample.txt
Esegui un programma e passa un nome file lungo:
CMD /c write.exe "c:\sample documents\sample.txt"
Spazi nel percorso del programma:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""
Spazi nel percorso del programma + parametri:
CMD /c ""c:\Program Files\demo.cmd"" Parameter1 Param2
CMD /k ""c:\batch files\demo.cmd" "Parameter 1 with space" "Parameter2 with space""
Avvia demo1 e demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""
Fonte: http://ss64.com/nt/cmd.html
Questo non è molto semplice
L'approccio migliore è quello di avere la parte del tuo script che si desidera eseguire in una "nuova finestra" per essere in un file .bat separato. Questo potrebbe non essere pratico se, ad esempio, hai bisogno di molto stato dal resto del tuo script (variabili, ecc.). Un'opzione è passare tutti i valori necessari (ad es. Dir per operare) al file batch:
start cmd.exe stuff.bat %this_dir%
Se hai una grande quantità di stato da trasmettere, potresti considerare di generare un file batch in fase di esecuzione:
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%"
Ovviamente questo è un esempio banale.
Le risposte sopra mi hanno aiutato. Ma ho ancora bisogno di capire. Ecco uno script di esempio che utilizzo per avviare 3 processi per lo sviluppo web. Il risultato è che 3 finestre rimangono aperte, poiché devono funzionare continuamente.
Mongo è stato aggiunto globalmente al mio percorso, quindi non ho bisogno di cd come faccio per gli altri due programmi. Ovviamente il percorso dei tuoi file varierà, ma speriamo che questo ti aiuti.
:: 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"
Grazie a tutti qui in Stack Overflow; questa soluzione risolve la domanda sopra ma è estesa per eseguire automaticamente queste attività:
Immagino che il mio progetto si chiama "antiquorum".
Crea un file "init.bat" nella directory % USERPROFILE% (apri una finestra cmd e dai un'occhiata al percorso a sinistra del cursore per sapere cos'è% 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
In una nuova finestra della riga di comando digitare: C:> init antiquorum
Il codice apre altre due finestre cmd e un browser. TIMEOUT evita errori nel browser.
La sezione : start fa il lavoro. È possibile eseguire le attività 1,2 o 4 separatamente digitando params come: server , worker o none per lasciare un cmd aperto nella radice del progetto "antiquorum" .
Godere.
Se ho capito bene che stai facendo questo a lato, il tuo file bat aprirà il prompt dei comandi e stamperà il tuo messaggio sullo schermo.
cmd.exe hello world
spero che questo ti aiuti.
L'aggiunta tra due comandi esegue entrambi i comandi ./k in order
Esempio:
cmd /k echo "hello"
questo comando si aprirà prima command promptquindi eseguirà il echo "hello"comando
cmd. Puoi semplicemente digitarestart rails s.