Comment empêcher la fermeture automatique de la console après l'exécution du fichier de commandes

510

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?

Joe
la source
5
Ce serait bien s'il existe un moyen de détecter si un fichier .cmd a été démarré par double-clic dans l'explorateur (alors vous voulez qu'il s'arrête à la fin) ou s'il a été démarré par une ligne de commande déjà ouverte. Dans le 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 et non pour les shells paremt).
vérifie

Réponses:

635

Dans les fichiers batch Windows / DOS:

pause

Cela imprime un joli "Press any key to continue . . . "message

Ou, si vous ne voulez pas le "Press any key to continue . . ."message, faites-le à la place:

pause >nul
Dave Bauman
la source
14
Aucune des suggestions ici ne fonctionne pour moi lorsque vous double-cliquez sur le fichier bat. C'est un environnement de serveur (et je dois y exécuter le script), donc ils auraient pu modifier le comportement. Cela ne change pas mon objectif. Pour garder la fenêtre de commande ouverte afin que je puisse ainsi le message d'erreur qu'il tape.
Henrik Erlandsson
1
Oui, cela ne fonctionne pas toujours en fonction de l'environnement. Pour une solution plus robuste, voir ma réponse ci-dessous. Essentiellement, faites simplement set / p exitkey = "Appuyez sur n'importe quelle touche pour continuer ..."
Steven Mark Ford
Soyez prudent, si quelqu'un exécute votre script sans la fenêtre de console (par exemple via le vbscript), il se bloquerait jusqu'à ce que vous le tuiez via le Gestionnaire des tâches.
Andry
Si son quelque chose comme maven utilise CALL, stackoverflow.com/a/52205298/4485678
Kevin Roy
pause fonctionne parfaitement ici
Davidson Lima
141

Cela dépend de la question exacte!

Effectue normalement pausele travail dans un fichier .bat .

Si vous souhaitez que cmd.exe ne se ferme pas pour pouvoir continuer à taper, utilisez la cmd /kcommande à la fin du fichier.

Rutger Nijlunsing
la source
2
Si vous exécutez des commandes Windows via la boîte de dialogue Exécuter, mettez cmd /kplutôt votre commande avant. & cmd /kne fonctionnera pas.
Noumenon
68

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

Je viens de ressentir le besoin de clarifier ce que /kfait (à partir du site Web de Windows):

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

Ainsi, cmd /ksans commande de suivi à la fin du fichier bat gardera simplement la cmd.exefenêtre ouverte pour une utilisation ultérieure.

D'un autre côté, pauseà la fin d'un fichier de commandes, le processus s'arrêtera simplement et se terminera cmd.exeà la première pression sur le bouton

Pierre de la Saint-Valentin
la source
24

La manière ci-dessous d'avoir des commandes dans un fichier batch ouvrira de nouvelles fenêtres d'invite de commandes et les nouvelles fenêtres ne se fermeront pas automatiquement.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2
user6928445
la source
2
Dans mon cas, j'ai eu une erreur lors de l'exécution de la commande de 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, j'ai une erreur et s'est également arrêté à tout à fait du terminal. Merci!
HowDoYouTellForAChild
20

Si vous utilisez Maven et que vous souhaitez ignorer la saisie et empêcher la console de se fermer pour voir le résultat, vous devez utiliser la CALLcommande dans le script, en plus de la «mvn clean install».

Comme cela fermera la console

ECHO This is the wrong exemple
mvn clean install
pause

Comme ça, la console restera ouverte

ECHO This is the right exemple
CALL mvn clean install
pause

Si vous n'utilisez pas la CALLcommande, aucun des exemples passés ne fonctionnera.

Andrey Hartung
la source
1
Merci beaucoup! Il empêche l'invite de se fermer si la commande a échoué.
Timur Gilauri
1
Ça a marché pour moi. Je voulais exécuter 2 commandes différentes dans 1 fichier bat. mais mon invite s'est fermée après la première commande. Mettre call <myCommand>résolu ce problème: Mon invite a cessé de fermer après la première exécution
Zombkey
1
Réponse la plus utile
gianmarcocalbi
14

Ajoutez cmd.exeune nouvelle ligne sous le code que vous souhaitez exécuter:

c:\Python27\python D:\code\simple_http_server.py

cmd.exe
lyfing
la source
C'est exactement ce que je cherchais, merci! La "pause" ne fonctionnera tout simplement pas lorsque votre script python se bloquera. Ce que je voulais, c'est voir un message d'erreur. Jusqu'à présent, je devais exécuter mes scripts python via la console
user70960
Mais cela fonctionne bien:python script.py %1 && cmd
user70960
Je vous remercie! Cela a aidé! Je créais un fichier batch pour exécuter des applications python.
fez.tival
10

ma façon est d'écrire un lot réel (en disant "foo.bat") pour terminer le travail; puis créez un autre "start.bat":

@echo off
cmd /k foo.bat

Je trouve que cela est extrêmement utile lorsque je configure des variables d'environnement ponctuelles.

Erich Chen
la source
1
Vous pouvez simplement mettre cmd /k(sans aucune commande) à la fin du foo.batfichier et l'exécuter. Vous n'avez pas besoin d'un start.batfichier séparé .
ADTC
9

Appelez cmdà la fin du fichier de commandes.

user4155296
la source
5

en plus pause.

set /p=

peut être utilisé. Il attendra l'entrée de l'utilisateur et libérera le flux lorsque vous appuyez sur Entrée.

ou

runas /user:# "" >nul 2>&1

qui fera de même sauf que rien de l'entrée utilisateur ne sera affiché ni ne restera dans l'historique des commandes.

npocmaka
la source
3

Possibilité 1: Créez simplement 2 fichiers .bat et écrivez dans le premier:

start <filename> // name of 2nd batch file
exit

Le fichier batch 2 est le fichier qui ne se fermera pas à la fin. Alors maintenant, lorsque vous ouvrez le lot n ° 1, il démarre le 2e et cloe lui-même. Lorsque le 2e se termine, il ne se fermera pas entièrement (tant que vous ne mettrez pas la sortie à la fin)

Possibilité 2: Fichier de lot 1:

call <filename>
cls
echo End of file
pause
<any code you want>

Lorsque le 2e fichier se termine, il passe à nouveau au fichier 1 et génère le reste. Avec cela, vous pouvez même faire des gestionnaires d'erreurs. Si le n ° 1 plante, il passe au n ° 2 et l'affiche

BlazeLP
la source
2

Ce petit hack demande à l'utilisateur d'entrer une clé et de la stocker dans la variable% exitkey% (cette variable pourrait être appelée comme vous voulez).

set /p exitkey= "Press any key to continue..."

NB: l'espace après le '=' est très important

Steven Mark Ford
la source
2
pause

ou

echo text to display
pause>nul
Zenedus
la source
2

Je sais que je suis en retard mais ma façon préférée est:

:programend
pause>nul
GOTO programend

De cette façon, l'utilisateur ne peut pas quitter en utilisant enter.

decadenza
la source
Je pense que oui, car c'est un moyen amélioré d'empêcher la console de se fermer. Même si l'utilisateur appuie sur une touche, la console reste ouverte. L'utilisateur ne sera obligé de quitter qu'en fermant la fenêtre de la console.
decadenza
2

J'ai eu des problèmes avec les réponses ici, alors j'ai trouvé cela, qui fonctionne pour moi (TM):

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause
lama12345
la source
1

Il existe deux façons de le faire en fonction du cas d'utilisation

1) Si vous souhaitez que l'invite Windows cmd reste ouverte afin que vous puissiez voir le résultat de l'exécution et le fermer par la suite; utilisation

pause

2) si vous voulez que l'invite Windows cmd reste ouverte et vous permette d'exécuter des mots de passe de commande; utilisation

cmd

entrez la description de l'image ici

Hitesh Sahu
la source
1

Facile, ajoutez cmd à votre dernière ligne de chauve-souris, MAIS! si vous réinitialisez ou effacez votre chemin système, vous devez démarrer votre cmd avec le chemin complet, comme:

%windir%\system32\cmd.exe

Par exemple, j'ai un fichier bat pour réinitialiser jdk à l'ancienne version comme ceci:

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

depuis que je réinitialise le chemin du système, je dois exécuter cmd avec le chemin complet, ou le système ne peut pas trouver cmd.exe, il ne parviendra pas à exécuter cmd, et juste fermer la fenêtre, et vous ne pouvez pas voir le message d'erreur .

Wei Kleeff
la source