web-dev-qa-db-fra.com

Fichier BAT: ouvre une nouvelle fenêtre de commande et entre le code

J'essaie de travailler avec un fichier .BAT ici, il devrait s'agir d'un script très simple mais je ne sais pas comment le faire (je ne le connais pas bien).

Ce que j'essaie de faire, c'est d'ouvrir une nouvelle fenêtre de commande: démarrez% windir%\system32\cmd.exe

Et le code que je tape derrière (une empreinte par exemple) devrait apparaître: echo "test in new window"

Comment puis-je faire ceci?

J'ai donc besoin de coder dans une nouvelle fenêtre de commande. Quelqu'un peut-il m'aider à ce sujet?

137
Tjekkles

Vous avez peut-être déjà trouvé votre réponse car vous l’avez demandé il ya quelque temps. Mais j'ai essayé de faire quelque chose de similaire lors du codage de ror. Je voulais exécuter "Serveur Rails" dans une nouvelle fenêtre de commande afin de ne pas avoir à ouvrir une nouvelle commande 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 que "/ K" exécute "echo Hello, World!" après la nouvelle cmd est en place.

Vous pouvez également utiliser le commutateur/C pour quelque chose de similaire.

start cmd /C pause

Ceci exécutera alors "pause" mais fermera la fenêtre quand la commande est faite. Dans ce cas, après avoir appuyé sur un bouton. J'ai trouvé cela utile pour "Serveur Rails". Lorsque je ferme mon serveur dev, je n'ai pas à fermer la fenêtre après.

230
aross

Utilisez les éléments suivants 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 se termine
/k Exécute la commande spécifiée par chaîne mais reste

Consultez la documentation de cmd.exe à l'aide de cmd /? pour plus de détails.

La mise en forme correcte de la chaîne de commande devient un peu plus compliquée 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 transmettez un paramètre de nom de fichier:
CMD /c write.exe c:\docs\sample.txt

Exécutez un programme et transmettez un nom de fichier long:
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""

Lancer demo1 et demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""

Source: http://ss64.com/nt/cmd.html

70
Shannon

Ce n'est pas très facile.

La meilleure approche consiste à faire en sorte que la partie de votre script que vous souhaitez exécuter dans une "nouvelle fenêtre" se trouve dans un fichier .bat séparé. Cela pourrait ne pas être pratique si, par exemple, vous avez besoin de beaucoup d’état du reste de votre script (variables, etc.). Une option consiste à transmettre au fichier batch les valeurs dont vous avez besoin (par exemple, dir pour fonctionner):

start cmd.exe stuff.bat %this_dir%

Si vous avez un grand nombre d’états à transmettre, vous pouvez envisager de générer un fichier de commandes au moment 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%"

Évidemment, ceci est un exemple trivial.

11
Sorpigal

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 permanence.

Mongo est globalement ajouté à mon chemin, je n'ai donc pas besoin de créer un 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"
6
Dan Zuzevich

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 lancer mon serveur Rails
  2. Exécuter un travaux de rake: worker pour ma gem delay_job aussi
  3. et Ouvrez le navigateur Internet par défaut pour afficher ma page
  4. enfin, pour quitter une fenêtre de commande ouverte pour toute commande supplémentaire au cours de 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 examinez le chemin situé à 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 de commande 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 params de la manière suivante: serveur, travailleur, ou aucun pour laisser un cmd ouvert dans racine de "antiquorum" projet.

Prendre plaisir.

5
Fer Padron

Si je vous ai bien compris, votre fichier chauve-souris ouvrira l'invite de commande et affichera votre message à l'écran.

cmd.exe hello world

j'espère que cela t'aides.

2
Chris Derry

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

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

Ajout/kentre deux commandesexécute les deux commandes _in order_.

Exemple:

_cmd /k echo "hello"
_

cette commande ouvrira d'abord _command Prompt_ puis exécutera _echo "hello"_ commande

0
Vicky Salunkhe