Créer une nouvelle fenêtre cmd.exe à partir d'une autre invite cmd.exe

102

Je suis en train de configurer CruiseControl.NET. Le problème que je rencontre est que j'exécute CC en tant qu'application console et lorsque ma construction se termine avec succès et s'exécute (en utilisant exec), il la lance dans l'invite CruiseControl DOS. J'utilise simplement de simples fichiers batch pour lancer mon application, mais l'exécuter dans la même invite que CC fait penser à CC que la construction continue tant que mon application s'exécute.

Existe-t-il des paramètres de ligne de commande cmd.exequi engendreront une autre fenêtre d'invite distincte?

Mark Stahler
la source
1
cmd.exe est un shell CUI, pas une interface graphique. Cela ne crée pas de fenêtres. Il utilise une fenêtre de console créée et gérée par une instance de conhost.exe, le processus hôte de la console. Si un programme CUI est démarré normalement, le code d'initialisation dans la DLL du client de base (kernel32.dll ou kernelbase.dll) hérite de la console du parent, le cas échéant, ou alloue une nouvelle console, à moins qu'elle ne soit démarrée avec l'indicateur de création DETACHED_PROCESS(c'est-à-dire pas de console) . Si elle a commencé avec l'indicateur de création CREATE_NEW_CONSOLE(comme les startutilisations de CMD ), la DLL de base alloue toujours une nouvelle console au lieu d'hériter de celle du parent.
Eryk Sun

Réponses:

201

Je pense que cela fonctionne:

start cmd.exe
e.James
la source
5
assurez-vous de vérifier toutes les différentes options pour démarrer "start /?" / wait et / je peux être utile.
Peter Gfader
46
fwiw, vous n'avez même pas besoin de mettre «cmd.exe» après le démarrage. seul le mot «démarrer» le fera.
JustJeff
start / d <chemin> Pour ceux qui veulent définir le chemin de la nouvelle fenêtre cmd. Voici une description détaillée.
anton.mo
56

Voici le code dont vous avez besoin:

start cmd.exe @cmd /k "Command"
xsukax
la source
10
Que @cmdfait-on? Existe-t-il une documentation à ce sujet?
michas
1
@supprime la sortie directe qui apparaîtrait normalement dans l'invite mais la commande sera toujours exécutée.
Thielicious
J'ai utilisé ceci, cela fonctionne mais si vous essayez de tuer le programme en cours par l'interruption du clavier ctrl + c, le programme en cours d'exécution ne s'arrête pas. Il ne s'arrête que lorsque vous fermez la fenêtre d'invite de commande nouvellement ouverte.
Sachin G.
Ne fonctionne pas pour les commandes multilignes utilisant ^. :( Un moyen de gérer cela?
user2173353
32

Tapez simplement startl'invite de commande:

start

Cela ouvrira de nouvelles cmdfenêtres.

Esterlinkof
la source
22
start cmd.exe 

ouvre une fenêtre séparée

start file.cmd 

ouvre le fichier de commandes et l'exécute dans une autre invite de commande

BlackMael
la source
2

Vous pouvez simplement taper ces 3 commandes à partir de l'invite de commande:

  1. start

  2. start cmd

  3. start cmd.exe

Jagadeesh HN
la source
2
START "notepad.exe"
echo Will launch the notepad.exe application
PAUSE

Pour créer n'importe quel type de fichier cmd, tout ce que vous avez à faire est d'enregistrer le contenu sous .bat, c'est-à-dire

@echo
TITLE example.bat
PAUSE
taskkill/IM cmd.exe

Transformez-le en un fichier "exemple.bat", enregistrez-le, puis ouvrez-le et exécutez-le.

Michael
la source
1

écriture simple dans votre fichier chauve-souris

@cmd

ou

@cmd /k "command1&command2"
bajie
la source
4
Merci pour l' &exécution de plusieurs commandes dans la nouvelle invite. J'aime ajouter exitpour qu'il ferme l'invite lorsque la commande a fini de s'exécuter.
Sylhare
0

J'ai également essayé d'exécuter un fichier de commandes qui exécutent le processus / serveur démon à la fin de la tâche CCNET; La seule façon de faire en sorte que CruiseControl génère un processus asynchrone indépendant SANS attendre la fin du processus est:

  1. créer un fichier batch pour exécuter le processus démon (application serveur)
  2. utiliser le planificateur de tâches pour exécuter le fichier de commandes en tant que tâche CCNET (à l'aide de schtasks.exe)

    schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
    
    • 08:50 est le format d'heure HH: MM

vous devrez peut-être arrêter le processus au démarrage de ccnet

PS: la réponse sélectionnée avec "start cmd.exe" ne fonctionne pas; une nouvelle invite de commande est effectivement générée, mais CCNET attendra que la cmd générée se termine.

cerf-volant
la source