195 votes

Comment supprimer la confirmation "Terminer le travail par lot (O/N)" ?

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 ?

14voto

ViperGeek Points 388

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.

13voto

Alec Mev Points 649

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.

6voto

Charles Roper Points 10231

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 :

TCC/LE options

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.

5voto

davidcann Points 1005

Voir cette question de Stack Overflow .

Cependant, Parcheando cmd.exe n'est pas quelque chose que je ferais pour cela.

1voto

Marcos Points 249

Solution utilisant AutoHotkey

  1. Télécharger et installer AutoHotkey

  2. Créez un script (par ex. terminate.ahk )

  3. 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} }

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X