Dans cmd, lorsque nous appuyons sur Ctrl + C, l'application cible est terminée, mais si l'application cible est appelée à partir d'un fichier de traitement par lots, nous obtenons cette confirmation "Terminate batch job (Y / N)". Je ne peux jamais me souvenir d'un cas où j'ai choisi de ne pas terminer le travail par lots. Comment pouvons-nous ignorer cette confirmation?
windows
command-line
batch
Srikanth
la source
la source
N
. Je suis curieux de savoir quel scénario vous avez où le script de traitement par lots se termine après votre entréeN
.-n
commutateur pour le ping cygwin plus souvent.Réponses:
Autant que je sache, ce comportement est conçu et est contrôlé par l’interpréteur de commandes. Il n'y a pas de méthode de "mappage" ou même d '"interception", sauf si vous décompilez et recompilez directement l'interpréteur.
la source
start
méthode suggérée par sgmoore à l'adresse superuser.com/questions/35698/ semble tout à fait parfait.Appuyez deux fois sur Ctrl+ C.
la source
Ctrl
et de taper àC
nouveau que de frapperY
ensuiteEnter
.Sur ce site , j'ai trouvé une solution efficace:
Pour ne pas avoir à taper cela chaque fois que j'ai fait un deuxième script appelé
script.cmd
dans le même dossier avec 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 consiste à placer le code suivant en haut de script.cmd, qui fait la même chose dans un seul fichier:
la source
@IF ""=="%1" (@%0 CALLED < nul) ELSE (@[your command])
. S'appelle de manière récursive, mais avec un argument la deuxième fois. Si votre script a des arguments, vous pouvez éventuellement utiliser le premier argument de position non utilisé. Cela pourrait être problématique si votre script a beaucoup d'arguments. Mon script n'a pas besoin d'arguments ni de saisie utilisateur.Installez Clink et modifiez le paramètre "terminate_autoanswer". Le fichier de paramètres doit être ici :
C:\Users\<username>\AppData\Local\clink\settings
.Cela fonctionne alors "avec n'importe quelle fenêtre" cmd.exe. Vous n'avez pas besoin de modifier ce qui est en cours d'exécution ou autre, car clink piggy-backs sur cmd.exe.
Frickin 'génial, IMO!
la source
\cmder\config\settings
. Voir la question liée ici github.com/cmderdev/cmder/issues/1666Si vous n'avez rien à faire dans le fichier de commandes après la fin normale de votre application, utilisez la
start
commande pour vous assurer que le fichier de commandes est déjà terminé au moment où vous appuyez sur Ctrl-C. Et par conséquent, le message n'apparaîtra pas.Par exemple:
(Testé sous Windows XP.)
la source
start
cela aiderait, mais cela me semble plausible. Je me demande donc si le vote par la voix implique que cela ne fonctionnerait pas? Ou peut-être que celui qui a un vote négatif ne connaît pas la commande de Windowsstart
(ou spécialementstart /wait
etstart /b
)? Voir ensuite microsoft.com/resources/documentation/windows/xp/all/proddocs/… . S'il vous plaît expliquer le downvote?start
ne fonctionnera pas. Chaque fois que cmd exécute un fichier de commandes, appuyez sur Ctrl + C pour terminer le processus en cours et afficher la question.start
commande a pris la décision stupide de rendre le titre de la fenêtre à la fois obligatoire et facultatif - de manière assez déroutante. Donc, si jamais votre%my_command%
est placé entre guillemets, il devient le titre de la fenêtre et le premier paramètre%my_params%
devient la commande . Pour être en sécurité, utilisezstart "some title here" %my_command% %my_params%
. La plupart n'utilisent""
et ne maudissent que le développeur qui n'utilise pas d' option/TITLE
ou/T
pour définir le titre.Cela fait un petit moment que je me bats avec cette volonté d'éviter l'invite "Terminate batch job".
Ma dernière épiphanie est un peu un tour de passe-passe (ou une fenêtre de console), en remplaçant une instance de
cmd.exe
une autre. Ceci est accompli en exécutant la commande / programme viastart cmd /k
suivi immédiatement parexit
dans le.BAT
fichier.La fenêtre de la console d'origine disparaît et la fenêtre de remplacement peut être arrêtée proprement via Ctrl- C.
Prenons l'exemple suivant
traceroute
qui peut être interrompu par Ctrl+ Cou autorisé à se terminer, renvoyant l'utilisateur à l'C:\>
invite:Le remplacement de l'environnement par un nouvel interpréteur de commande peut ne pas convenir à tout le monde, mais, à l'œil nu, il a l'air et fonctionne bien pour moi.
la source
exit /b
pour sortir du script batchLa solution de Gringo est bonne, mais ne fonctionne pas bien avec les scripts qui transmettent la liste des arguments (c'est-à-dire
python myscript.py %*
), carSHIFT
ne met pas à jour%*
. Il existe des solutions de contournement , mais elles ont certaines limitations.Voici la modification avec laquelle je me suis retrouvé:
99. (9)% sans défaut.
la source
myscript.py
veut lire stdin.Voir cette question de débordement de pile .
Cependant, corriger cmd.exe n'est pas quelque chose que je ferais pour cela.
la source
Dans mon cas, c’est le fichier ping.bat qui se trouvait dans mon répertoire utilisateur (C: \ Utilisateurs \ sous Vista ou C: \ Documents et paramètres \ sous XP) qui retenait le travail par lots indéterminé.
Ce fichier de commandes était exécuté chaque fois que j'exécutais une commande ping à partir de l'invite de commande, où le répertoire actuel est mon répertoire utilisateur. Le ping depuis la fenêtre Exécuter ou depuis le répertoire d'un autre utilisateur fonctionnait bien.
Suppression du fichier de mon répertoire utilisateur et le problème a été résolu!
la source
Démarrer fonctionne, mais maintenant la fenêtre ouverte par le fichier de commandes est modifiée à partir des options que j'avais et les "propriétés" sont désactivées (ne répondra pas).
la source
Il suffit de rediriger le lot stdin vers null en ajoutant <nul à la fin de la commande.
la source
J'ai rencontré ce problème avec un fichier EXE qui semblait jeter ^ C dans le lot parent à la sortie, ce qui a provoqué l'invite "Terminate Batch Job", même lors d'une sortie en mode minimal.
La solution que j'ai choisie consistait à exécuter le lot avec "Démarrer", comme pour d'autres réponses, mais à partir d'une invite PowerShell (ou via la méthode d'interprétation PowerShell de CMD, si vous le souhaitez).
Nous sommes en 2018 et sous Windows 10, Microsoft a commencé à supplanter CMD avec PowerShell en tant qu'invite de commande préférée. Il est donc facilement disponible dans l'interface graphique par défaut.
Start
est un alias pour Start-Process .Lorsqu'il est exécuté, il se lance et revient. Ainsi, lorsque vous arrêtez le processus lancé, il n'y a pas d'invite "Terminate Batch Job".
Par défaut, il n'attend pas et aucun argument supplémentaire n'est requis au-delà de la commande et ses arguments.
L'utilisation
start mything.exe -mythings -arguments
de mon lot a parfaitement fonctionné.Dans PowerShell, les scripts doivent être précédés de leur chemin pour être lancés. Je lance donc mon fichier de commandes en tant que
.\host.bat
.la source
TCC / LE , qui est un remplacement CMD libre (pensez à CMD ++), a une option pour supprimer l’invite de fin de traitement par lots. Vous pouvez trouver l'option dans la boîte de dialogue Configuration de démarrage TCC :
Capture d'écran:
Si vous n'avez jamais entendu parler de TCC / LE, voici un texte de présentation du site:
J'ai utilisé TCC / LE pendant des années et 4SA avant. J'ai beaucoup d'amour pour ça et je peux le recommander. La seule raison pour laquelle je ne l'utilise toujours pas, c'est que j'utilise presque exclusivement PowerShell maintenant.
la source
Une des principales raisons de supprimer le "travail par lots à terminer (O / N)" consiste à exécuter un programme en boucle (par exemple: à réexécuter au cas où il tomberait en panne).
Ce https://stackoverflow.com/a/8185270/1170023 a contribué à cette solution:
la source
Le moyen le plus simple de supprimer la confirmation si vous utilisez le terminal Hyper , consiste à ajouter le plug - in hyper-yes .
la source
À la fin de votre script, ajoutez simplement la commande suivante:
echo
Cela n'endommagera pas le comportement de votre script et empêchera apparemment CDM de vous demander si vous souhaitez mettre fin au lot.
la source