664 votes

Comment empêcher la fermeture automatique de la console après l'exécution d'un fichier batch ?

Quelle commande puis-je mettre à la fin d'un fichier batch pour empêcher la fermeture automatique de la console après l'exécution du fichier ?

6 votes

Ce serait bien s'il y avait un moyen de détecter si un fichier .cmd a été lancé par un double-clic dans l'explorateur (alors vous voulez qu'il fasse une pause à la fin) ou s'il a été lancé par une ligne de commande déjà ouverte. Dans ce dernier cas (et surtout s'il est exécuté par un autre programme), vous ne voulez pas de pause. Je n'ai pas trouvé de bonne solution pour ce cas (et j'utilise généralement une variable if %NOPAUSE%, mais cela ne fonctionne que pour les programmes parents, pas pour les shells paremt).

1 votes

801voto

Dave Bauman Points 2254

Dans les fichiers batch de Windows/DOS :

pause

Cela imprime une belle "Press any key to continue . . . " message

Ou, si vous ne voulez pas le "Press any key to continue . . ." faites plutôt ceci :

pause >nul

26 votes

Aucune des suggestions ici ne fonctionne pour moi lorsque je double-clique sur le fichier bat. C'est un environnement de serveur (et je dois y exécuter le script), donc ils pourraient avoir modifié le comportement. Cela ne change pas mon objectif. Garder la fenêtre de commande ouverte pour que je puisse voir le message d'erreur qu'elle tape.

2 votes

Oui, cela ne fonctionne pas toujours selon l'environnement. Pour une solution plus robuste, voir ma réponse ci-dessous. Essentiellement, il suffit de faire set /p exitkey= "Appuyez sur n'importe quelle touche pour continuer...".

1 votes

Attention, si quelqu'un exécute votre script sans la fenêtre de la console (par exemple à travers le vbscript), alors il se bloquera jusqu'à ce que vous le tuiez à travers le gestionnaire des tâches.

177voto

Rutger Nijlunsing Points 3051

Cela dépend de la question exacte !

Normalement pause fait le travail dans un délai de .bat fichier.

Si vous voulez cmd.exe pas trop près pour pouvoir continuer à taper, utilisez cmd /k à la fin du fichier.

4 votes

Si vous exécutez les commandes Windows par le biais de la boîte de dialogue Exécuter, tapez cmd /k avant votre commande à la place. & cmd /k ne fonctionnera pas.

90voto

Valentine Stone Points 935

Si vous voulez que cmd.exe ne se ferme pas, et que vous puissiez continuer à taper, utilisez cmd /k

J'ai juste ressenti le besoin de clarifier ce que /k fait (à partir du site web de Windows) :

/k : Exécute la commande spécifiée par la chaîne et continue.

Alors cmd /k sans commande de suivi à la fin du fichier bat ne fera que garder cmd.exe fenêtre ouverte pour une utilisation ultérieure.

D'autre part pause à la fin d'un fichier batch mettra simplement en pause le processus et terminera cmd.exe au premier appui sur le bouton

65voto

Andrey Hartung Points 483

Si vous utilisez Maven et que vous voulez sauter la saisie et empêcher la fermeture de la console pour voir le résultat, vous devez utiliser la fonction CALL dans le script, en plus du simple 'mvn clean install'.

Comme ceci fermera la console

ECHO This is the wrong exemple
mvn clean install
pause

Comme ça, la console restera ouvert

ECHO This is the right exemple
CALL mvn clean install
pause

Si vous n'utilisez pas le CALL aucun des exemples précédents ne fonctionnera. Parce que pour une raison quelconque, le comportement par défaut de cmd lors de l'appel d'un autre fichier batch (qui est mvn dans ce cas) est essentiellement de remplacer le processus actuel avec lui, contrairement à l'appel d'un .exe.

2 votes

Merci beaucoup ! Il empêche la fermeture de l'invite si la commande a échoué.

2 votes

Ça a marché pour moi. Je voulais exécuter deux commandes différentes dans un fichier bat, mais mon invite s'est fermée après la première commande. En mettant call <myCommand> a résolu ce problème : Mon invite a cessé de se fermer après la première exécution.

1 votes

Réponse la plus utile

31voto

user6928445 Points 241

La façon ci-dessous d'avoir des commandes dans un fichier batch ouvrira une nouvelle fenêtre d'invite de commande et la nouvelle fenêtre ne se fermera pas automatiquement.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

2 votes

Dans mon cas, j'ai eu une erreur pendant l'exécution de la commande terminal, et donc, les commandes 'pause' et 'cmd /k' ne m'ont pas aidé à arrêter le programme à cause de l'erreur. Cet exemple m'a aidé à montrer que j'ai eu une erreur et que j'ai arrêté de tout faire à partir du terminal. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X