Fichier BAT: ouvrez une nouvelle fenêtre cmd et exécutez une commande à l'intérieur

164

J'essaye d'ouvrir une nouvelle fenêtre de commande dans un fichier BAT:

start %windir%\system32\cmd.exe

Après son ouverture, j'aimerais exécuter une commande BAT dans la nouvelle fenêtre:

echo "test in new window"

Comment puis-je faire ceci?

Tjekkles
la source

Réponses:

263

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.

aross
la source
2
Si vous l'utilisez pour exécuter un serveur rails, vous n'avez en fait pas besoin de taper cmd. Vous pouvez simplement taper start rails s.
fbonetti
86

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

Shannon Matthews
la source
13

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.

sorpigal
la source
11

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"
Dan Zuzevich
la source
7

Merci à tous ici dans Stack Overflow; cette solution résout la question ci-dessus mais est étendue pour exécuter automatiquement ces tâches:

  1. Je veux exécuter mon serveur de rails
  2. Exécutez un travail de rake: ouvrier pour ma gemme retardée aussi
  3. et ouvrez le navigateur Internet par défaut pour afficher ma page
  4. enfin, laisser une fenêtre cmd ouverte pour toute commande supplémentaire pendant ma session.

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.

Fer Padron
la source
2

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.

Chris Derry
la source
2

pour exécuter un fichier python dans une nouvelle fenêtre cmd avec des espaces dans le nom du fichier:

start cmd.exe /k python "C:\Program Files\HelloWorld.py"
bracoo
la source
0

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 promptpuis exécutera la echo "hello"commande

Vicky Salunkhe
la source