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 ?

73voto

Gringo Suave Points 1109

A ce site j'ai trouvé une solution efficace :

script2.cmd < nul

Pour ne pas avoir à taper ceci à chaque fois, j'ai fait un deuxième script appelé script.cmd dans le même dossier que la ligne ci-dessus. J'ai testé cette technique sur XP uniquement, mais d'autres l'ont confirmée sur Win 7.

Nathan ajoute : une autre option est de mettre le code suivant en haut de script.cmd qui fait la même chose dans un seul fichier :

rem Bypass "Terminate Batch Job" prompt.
if "%~1"=="-FIXED_CTRL_C" (
   REM Remove the -FIXED_CTRL_C parameter
   SHIFT
) ELSE (
   REM Run the batch with <NUL and -FIXED_CTRL_C
   CALL <NUL %0 -FIXED_CTRL_C %*
   GOTO :EOF
)

71voto

Neal Points 1575

Appuyez sur Ctrl + C deux fois.

67voto

scwagner Points 3063

AFAIK vous ne pouvez pas car ce comportement est conçu et contrôlé par l'interpréteur de commande. Il n'y a pas de méthode pour "mapper" ou même "intercepter" ce comportement, à moins de décompiler et recompiler l'interpréteur directement.

42voto

technomalogical Points 1859

Installer Clink et modifiez le paramètre "terminate_autoanswer". Le fichier de configuration devrait être ici : C:\Users\<username>\AppData\Local\clink\settings .

# name: Auto-answer terminate prompt
# type: enum
# Automatically answers cmd.exe's 'Terminate batch job (Y/N)?' prompts. 0 =
# disabled, 1 = answer 'Y', 2 = answer 'N'.
terminate_autoanswer = 1

Cela fonctionne donc avec n'importe quel cmd.exe fenêtre. Vous n'avez pas besoin de modifier ce qui est en cours d'exécution ou autre, puisque clink se greffe sur cmd.exe . 1

Génial, IMO !


1 Mais vous devrez fermer et rouvrir cmd.exe avant de le faire avant qu'il ne prenne effet.
2 Dépôt original non maintenu de CLink ici : http://mridgers.github.io/clink/

20voto

jackrabbit Points 2990

Si vous n'avez pas besoin de faire quoi que ce soit dans le fichier de traitement par lots après que votre application se termine normalement, alors l'utilisation de la commande start permet de s'assurer que le fichier batch est déjà terminé au moment où vous appuyez sur Ctrl-C. Et donc le message n'apparaîtra pas.

Par exemple :

@echo off

set my\_command=ping.exe
set my\_params=-t www.google.com

echo Command to be executed by 'start': %my\_command% %my\_params%

:: When NOT using /B or /WAIT then this will create a new window, while
:: execution of this very batch file will continue in the current window:

start %my\_command% %my\_params%

echo.
echo This line will be executed BEFORE 'start' is even finished. So, this
echo batch file will complete BEFORE one presses Ctrl-C in the other window.
echo.

:: Just for testing use 'pause' to show "Press any key to continue", to see
:: the output of the 'echo' commands. Be sure to press Ctrl-C in the window
:: that runs the 'ping' command (not in this very window). Or simply remove
:: the next line when confused:

pause

(Testé sur Windows XP.)

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