Réponses:
Vous trouverez peut-être déjà votre réponse parce que vous l'avez posée il y a quelque temps. Mais j'ai essayé de faire quelque chose de similaire lors du codage de ror. Je voulais lancer "rails server" dans une nouvelle fenêtre cmd pour ne pas avoir à ouvrir une nouvelle cmd et retrouver mon chemin.
Ce que j'ai découvert, c'est d'utiliser le commutateur K comme ceci:
start cmd /k echo Hello, World!
démarrer avant que "cmd" ouvre l'application dans une nouvelle fenêtre et "/ K" exécute "echo Hello, World!" après la mise en place du nouveau cmd.
Vous pouvez également utiliser le commutateur / C pour quelque chose de similaire.
start cmd /C pause
Cela exécutera alors "pause" mais fermera la fenêtre lorsque la commande est terminée. Dans ce cas, après avoir appuyé sur un bouton. J'ai trouvé cela utile pour le "serveur rails", puis quand j'arrête mon serveur de développement, je n'ai pas à fermer la fenêtre après.
Utilisez ce qui suit dans votre fichier de commandes:
start cmd.exe /k "more-batch-commands-here"
ou
start cmd.exe /c "more-batch-commands-here"
/ c Exécute la commande spécifiée par string puis termine
/ k Exécute la commande spécifiée par string mais reste
Consultez la documentation de cmd.exe en utilisant cmd /?
pour plus de détails.
Le formatage correct de la chaîne de commande devient un peu plus compliqué avec des espaces dans les arguments. Voir les exemples ci-dessous. Notez l'utilisation de guillemets doubles imbriqués dans certains exemples.
Exemples:
Exécutez un programme et passez un paramètre de nom de fichier:
CMD /c write.exe c:\docs\sample.txt
Exécutez un programme et transmettez un long nom de fichier:
CMD /c write.exe "c:\sample documents\sample.txt"
Espaces dans le chemin du programme:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""
Espaces dans le chemin du programme + paramètres:
CMD /c ""c:\Program Files\demo.cmd"" Parameter1 Param2
CMD /k ""c:\batch files\demo.cmd" "Parameter 1 with space" "Parameter2 with space""
Lancez demo1 et demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""
Source: http://ss64.com/nt/cmd.html
Ce n'est pas très facile.
La meilleure approche consiste à placer la partie de votre script que vous souhaitez exécuter dans une «nouvelle fenêtre» dans un fichier .bat séparé. Cela peut ne pas être pratique si, par exemple, vous avez besoin de beaucoup d’états du reste de votre script (variables, etc.). Une option consiste à transmettre toutes les valeurs dont vous avez besoin (par exemple dir pour opérer) au fichier de commandes:
start cmd.exe stuff.bat %this_dir%
Si vous avez une grande quantité d’états à transmettre, vous pouvez envisager de générer un fichier batch lors de l’exécution:
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%"
C'est évidemment un exemple trivial.
Les réponses ci-dessus m'ont aidé. Mais encore besoin de comprendre. Voici un exemple de script que j'utilise pour démarrer 3 processus de développement Web. Il en résulte que 3 fenêtres restent ouvertes, car elles doivent fonctionner en continu.
Mongo est globalement ajouté à mon chemin, donc je n'ai pas besoin de cd comme je le fais pour les deux autres programmes. Bien sûr, le chemin d'accès à vos fichiers variera, mais j'espère que cela vous aidera.
:: 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"
Merci à tous ici dans Stack Overflow; cette solution résout la question ci-dessus mais est étendue pour exécuter automatiquement ces tâches:
Je suppose que mon projet s'appelle «antiquorum».
Créez un fichier "init.bat" dans votre répertoire% USERPROFILE% (ouvrez une fenêtre cmd et regardez le chemin à gauche du curseur pour savoir ce qu'est% 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
Dans une nouvelle fenêtre de ligne de commande, tapez: C:> init antiquorum
Le code ouvre deux autres fenêtres cmd et un navigateur. TIMEOUT évite les erreurs dans le navigateur.
La section : start fait le travail. Vous pouvez exécuter les tâches 1, 2 ou 4 séparément en tapant les paramètres comme: serveur , worker ou none pour laisser un cmd ouvert à la racine du projet "antiquorum" .
Prendre plaisir.
Si je comprends bien que vous faites cela à côté, votre fichier chauve-souris ouvrira l'invite de commande et imprimera votre message à l'écran.
cmd.exe hello world
J'espère que cela t'aides.
L'ajout entre deux commandes exécute les deux commandes ./k
in order
Exemple:
cmd /k echo "hello"
cette commande s'ouvrira d'abord command prompt
puis exécutera la echo "hello"
commande
cmd
. Vous pouvez simplement taperstart rails s
.