Dans cmd, lorsque nous appuyons sur Ctrl+C, nous obtenons la fin de l'application cible mais si l'application cible est appelée à partir d'un fichier batch, nous obtenons cette confirmation "Terminate batch job (Y/N)". Je ne me souviens pas d'un cas où j'ai choisi de ne pas terminer le travail par lot. Comment éviter cette confirmation ?
Réponses
Trop de publicités?Je me bats avec ce désir d'éviter l'invite "Terminer le travail par lot" depuis un petit moment.
Ma dernière révélation est un peu un tour de passe-passe (ou une fenêtre de console), en remplaçant une instance de cmd.exe
avec un autre. Pour ce faire, on exécute la commande/le programme par l'intermédiaire de start cmd /k
suivi immédiatement par exit
において .BAT
fichier.
La fenêtre de la console d'origine disparaît et celle de remplacement peut être arrêtée proprement via Ctrl - C .
Considérons l'exemple suivant d'un traceroute
qui peut être interrompu par Ctrl + C ou l'autoriser à terminer, ce qui ramène l'utilisateur à la page d'accueil de l'UE. C:\>
rapide :
@echo off
set timeout=100
if not "%2"=="" set timeout=%2
start cmd /k tracert -w %timeout% %1
exit
Le remplacement de l'environnement par un nouvel interpréteur de commandes ne convient peut-être pas à tout le monde, mais, à l'œil nu, il semble et fonctionne bien pour moi.
La solution de Gringo est bonne, mais ne fonctionne pas bien avec les scripts qui transmettent la liste des arguments (i.e. python myscript.py %*
), puisque SHIFT
ne met pas à jour %*
. Il existe solutions de contournement mais ils ont certaines limites.
Voici la modification à laquelle j'ai abouti :
IF [%JUSTTERMINATE%] == [OKAY] (
SET JUSTTERMINATE=
python myscript.py %*
) ELSE (
SET JUSTTERMINATE=OKAY
CALL %0 %* <NUL
)
99.(9)% sans défaut.
TCC/LE qui est un remplacement gratuit de CMD (considérez-le comme CMD++), possède une option permettant de supprimer l'invite de fin de travail par lot. Vous pouvez trouver cette option dans le menu Dialogue de configuration du démarrage de TCC :
Annuler le fichier de lot par Ctrl-C : Annuler le traitement du fichier de lot sans l'invite habituelle lorsque vous appuyez sur Control-C.
Capture d'écran :
Si vous n'avez jamais entendu parler de TCC/LE auparavant, voici quelques informations tirées du site :
TCC/LE est un remplacement de la ligne de commande CMD (l'invite de commande par défaut de Windows). TCC/LE est un surensemble de CMD, avec 111 commandes internes (CMD en compte moins de 40), 240 variables et fonctions internes, et des centaines d'améliorations apportées aux commandes CMD existantes.
TCC/LE fonctionne avec vos applications de ligne de commande et vos fichiers batch existants, mais offre des améliorations majeures des capacités de la ligne de commande et des fichiers batch, et ajoute des milliers de nouvelles fonctionnalités à votre invite de commande Windows.
J'ai utilisé TCC/LE pendant des années et 4NT avant cela. Je l'aime beaucoup et je peux le recommander. La seule raison pour laquelle je ne l'utilise pas encore est que j'utilise presque exclusivement PowerShell maintenant.
Voir cette question de Stack Overflow .
Cependant, Parcheando cmd.exe n'est pas quelque chose que je ferais pour cela.
Solution utilisant AutoHotkey
-
Télécharger et installer AutoHotkey
-
Créez un script (par ex.
terminate.ahk
) -
Collez le script suivant
SingleInstance Force
IfWinActive ahk_exe cmd.exe
^d::terminate()
IfWinActive ahk_exe powershell.exe
^d::terminate()
terminate() { SendInput {Ctrl down}c{Ctrl up} Sleep 100 SendInput y{Enter} }
-
Exécuter le script
Maintenant, quand vous appuyez sur Ctrl+D en powershell.exe
o cmd.exe
a Ctrl+C y Enter est envoyée et cela met fin au programme.
Si vous voulez personnaliser la touche de raccourci, voir Liste des clés
Si vous voulez appliquer ce raccourci à un autre programme, il suffit d'ajouter ceci au script (par ex. Visual Studio Code
-> code.exe
) :
#IfWinActive ahk_exe code.exe
^d::terminate()
Le nom du programme peut être trouvé à l'adresse suivante Task Manager > Details