Wie unterdrücken Sie die Bestätigung "Batch-Job beenden (J / N)"?

90614
Srikanth

Wenn Sie in cmd die Tastenkombination Strg + C drücken, wird die Zielanwendung beendet. Wenn die Zielanwendung jedoch aus einer Batchdatei aufgerufen wird, erhalten Sie die Bestätigung "Batchjob (J / N) beenden". Ich kann mich nie an eine Instanz erinnern, bei der ich den Batch-Job nicht beendet habe. Wie können wir diese Bestätigung überspringen?

134
Haben Sie schon einmal die Antwort von Sgmoore versucht? http://superuser.com/questions/35698/how-to-supress-terminate-batch-job-yn-confirmation/35741#35741 Arjan vor 15 Jahren 0
"Ich kann mich nie an eine Instanz erinnern, bei der ich den Batch-Job nicht beendet habe." In den meisten Fällen wird der Job jedoch auch dann beendet, wenn Sie mit Nein antworten. PhiLho vor 9 Jahren 8
@PhiLho - Das kann nicht wahr sein, da meine Skripte immer fortgesetzt werden, wenn ich 'N' eingebe. Ich bin gespannt, in welchem ​​Szenario das Batch-Skript endet, nachdem Sie 'N' eingegeben haben. dbenham vor 9 Jahren 0
Ich hatte gehofft, das wäre einfach, aber wie üblich hat Microsoft etwas Schlichtes in den Arsch gelegt. Die nachstehenden Antworten sind viel zu aufwendig, um diesen kleinen Ärger zu vermeiden. Ich bin nur verärgert, dass es keinen einfachen Weg gibt, das zu lösen. Ernsthaft Microsoft, was ist der Sinn dieser Aufforderung? Ja, ich bin mir sicher, deshalb drücke ich Strg + C ... Chev vor 9 Jahren 0
Dieses Problem veranlasst mich zumindest, den Schalter "-n" für cygwin ** ping ** häufiger zu merken und zu verwenden. palswim vor 8 Jahren 0
Ich habe nicht den Ruf, eine Antwort zu posten, aber ich fand Folgendes unter Windows 7, wenn eine externe Java-Anwendung ausgeführt wird (obwohl der Befehlsfenster-Verlauf aus irgendeinem Grund gelöscht wird): `@CMD / K" java -jar "% ~ dpn0.jar"% * "& EXIT 0" Jeff G vor 7 Jahren 0

16 Antworten auf die Frage

54
Kirill V. Lyadvinsky

Drücken Sie zweimal Ctrl+ C.

Dies funktioniert nicht, sondern wiederholt die Aufforderung. Joey vor 15 Jahren 4
Bist du sicher? Ich habe es gerade in einer XP-Eingabeaufforderung ausprobiert und es hat funktioniert. Ich werde später in DOS 7.11 nachsehen, aber ich bin mir ziemlich sicher, dass Enter die Aufforderung wiederholt und nicht Strg-C. Synetech vor 14 Jahren 0
Ich habe es in PS 2.0 unter Win7 ausprobiert und es hat funktioniert. Ich habe jedoch auch die Wiederholungsaufforderung in derselben Umgebung gesehen. Es ist ein Mysterium. Immer noch +1. jcollum vor 12 Jahren 0
funktionierte perfekt für mich, danke! captainclam vor 11 Jahren 5
Ich habe gerade meine Datenbank damit getötet! Das Skript wartete auf "Pause", also machte ich STRG-C, und dann kam die Aufforderung, also machte ich wieder STRG-C, und dann führte die Batch-Datei weiter und löschte meine Datenbank! http://superuser.com/questions/740004/why-does-ctrl-c-on-terminate-batch-job-prompt-means-carry-on Sebastien Diot vor 10 Jahren 4
Das hat das OP nicht gefragt. Er könnte genauso gut "N" nach ^ C eingeben. vladr vor 9 Jahren 2
@vladr es ist unendlich viel einfacher, `Ctrl` zu halten und erneut auf 'C' zu tippen, statt 'Y' zu drücken und dann 'Enter'. Nick T vor 8 Jahren 3
@SebastienDiot Sie haben eine neue Technik in einem Skript ausprobiert, die das Potenzial hatte, Daten dauerhaft zu zerstören? Das ist ... Mutig. Basic vor 8 Jahren 15
@Basic Zunächst war es "meine" (persönliche) Datenbank, nicht das Produktivsystem, also nur "Produktivitätsverlust" (Download und Wiederherstellen der DB), nicht "Datenverlust". Zweitens, wie ist "CTRL-C" eine "neue Technik"? : D Sebastien Diot vor 8 Jahren 1
Zweimal? Nicht für mich: `^ C ^ Batch-Job abschließen (J / N)? ^ Batch-Job abbrechen (J / N)? ^ C ^ Batch-Job abbrechen (J / N)? ^ C` Post Self vor 7 Jahren 0
@ kim366 Gibt es eine Chance, dass Ihre Anwendung automatisch neu gestartet wurde? Kirill V. Lyadvinsky vor 7 Jahren 0
@ KirillV.Lyadvinsky Ich weiß es nicht. Ich habe einen Express-Server beendet. Ich bin zu all dem zu neu, um es mit Sicherheit zu sagen Post Self vor 7 Jahren 0
Diese Lösung funktioniert nur 2-3 Mal hintereinander. Sie können eine Schleife mit einem langen Befehl erstellen. Sie werden die Schleife nur wenige Male neu starten. Und irgendwann sind ganze Terminalfenster geschlossen. Sergey vor 6 Jahren 0
44
BinaryMisfit

AFAIK ist nicht möglich, da dieses Verhalten von Entwurf und vom Befehlsinterpreter gesteuert wird. Es gibt keine Methode, diese abzubilden oder gar abzufangen, es sei denn, Sie dekompilieren den Interpreter direkt neu und kompilieren ihn neu.

Das ist enttäuschend :( Srikanth vor 15 Jahren 29
Ja, das ist enttäuschend. Noch enttäuschender ist, dass mit dem BREAK-Befehl, der standardmäßig unter XP nichts bewirkt, die Eingabeaufforderung umgeschaltet werden konnte. Synetech vor 14 Jahren 0
Obwohl es wahr sein mag, kann sich der Interpreter nicht anders verhalten. Verwenden Sie "start", wie sgmoore unter http://superuser.com/questions/35698/how-to-supress-terminate-batch-job-yn-confirmation/35741 empfohlen # 35741 scheint mir ein perfekter Workaround zu sein. Arjan vor 14 Jahren 2
Hier ist es: http://superuser.com/a/498798/56101 Totty.js vor 10 Jahren 0
43
Gringo Suave

An dieser Stelle habe ich eine effektive Lösung gefunden:

script2.cmd < nul 

Um dies nicht jedes Mal eingeben zu müssen, wenn ich ein zweites Skript erstellt habe, das script.cmdim selben Ordner mit der obigen Zeile aufgerufen wurde . Ich habe diese Technik nur unter XP getestet, aber andere haben sie unter Win 7 bestätigt.

Nathan fügt hinzu: Eine weitere Option ist, den folgenden Code oben in script.cmd einzufügen, der dasselbe in einer Datei tut:

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 ) 
Wenn Sie eine Batchdatei aus sich heraus aufrufen (ohne den Befehl CALL zu verwenden), wird die Ausführung "permanent" übertragen. Wenn STDIN zu NUL umgeleitet wird, wird immer noch die Aufforderung "Batch-Job beenden" angezeigt, die jedoch nicht auf Eingabe wartet (weil STDIN nicht mehr vorhanden ist). Das funktioniert für mich ... William vor 11 Jahren 1
Dies funktioniert in Windows 7. William vor 11 Jahren 3
Es funktioniert, sofern Sie keine Benutzereingaben im Stapel benötigen. Augusto Men vor 11 Jahren 15
@William, Nur das Skript aufzurufen funktionierte nicht für mich, aber ich fand eine Problemumgehung: `@IF" "=="% 1 "(@% 0 CALLED <nul) ELSE (@ [Ihr Befehl])` . Ruft sich rekursiv auf, aber zum zweiten Mal mit einem Argument. Wenn Ihr Skript über Argumente verfügt, können Sie möglicherweise das erste nicht verwendete Positionsargument verwenden. Das kann problematisch sein, wenn Ihr Skript viele Argumente enthält. Mein Skript brauchte keine Argumente oder Benutzereingaben. jpmc26 vor 11 Jahren 2
Die Antwort von jpmc hat für mich funktioniert. Gibt es das verdammte Ende (y / n)? Nachricht am Ende dann aber nicht aufhören. ggb667 vor 10 Jahren 0
Siehe meine [Antwort] (http://superuser.com/questions/35698/how-to-supress-terminate-batch-job-yn-confirmation/715798#715798), falls Ihr Skript auf `% *` setzt. Olegs Jeremejevs vor 10 Jahren 0
perfekt, sollte angenommen werden! Totty.js vor 10 Jahren 0
Ich denke: `start / b / wait cmd / c` funktioniert besser Sebastian Godelet vor 10 Jahren 0
Ein anderes Problem mit dieser Antwort ist, dass es nicht funktioniert, wenn Ihr Skript die aktuellen Eingaben von stdin lesen möchte. jamesdlin vor 7 Jahren 0
23
Macke

Installieren Sie Clink und ändern Sie die Einstellung "terminate_autoanswer". Die Einstellungsdatei sollte hier sein : 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 

Das funktioniert dann einfach mit jedem cmd.exe-Fenster. Sie müssen nicht ändern, was ausgeführt wird oder nicht, seitdem clink piggy-backs auf cmd.exe.

Frickin 'geil, IMO!

Clink ist fantastisch, aber bei mir funktioniert cmd.exe oder Console2 nicht. Es fragt immer noch und es wird nicht automatisch gefüllt. iono vor 11 Jahren 0
@tometoftom: Hast du die Einstellungsdatei wie oben geändert? Ich musste das tun, damit es funktioniert. (Beachten Sie, dass Sie ein Administrator sein müssen, um die Datei unter Windows Vista und höher korrekt zu speichern ...) Macke vor 11 Jahren 0
Ja, mit den Einstellungen geändert. Ich bin ein Administrator :( Ich habe versucht, das Äquivalent von "Als Administrator ausführen") für ausführbare Dateien auszuführen, indem Sie eine Verknüpfung der Einstellungsdatei erstellen ausgegraut. iono vor 11 Jahren 0
Führen Sie den Editor im Admin-Modus aus und bearbeiten Sie die Datei. Macke vor 11 Jahren 0
Ah, immer noch keine Würfel. * tiefer Seufzer * Microsoft, um Himmels willen ... iono vor 11 Jahren 2
@iono Hast du eine nicht-englische Windows-Version? In diesem Fall konnte clink die Aufforderung vor der Veröffentlichung von 0.4.3 vor einigen Tagen nicht automatisch beantworten: https://github.com/mridgers/clink/releases/tag/0.4.3 schlamar vor 9 Jahren 2
Ich kann bestätigen, dass der neueste Clink jetzt die französische Eingabeaufforderung "Terminer le program de commandes" wunderbar unterstützt ... :-) Ein lang anhaltender Ärgernis wurde zumindest von meinem Computer entfernt! Randbemerkung: Clink passt perfekt zu ConEmu, dem ersten guten Ersatz für die Windows-Eingabeaufforderung, den ich gefunden habe. PhiLho vor 9 Jahren 0
Verwandt: für diejenigen, die cmder ** verwenden, ist die Einstellung auf `\ cmder \ config \ settings`. Sehen Sie das Problem hier https://github.com/cmderdev/cmder/issues/1666 edmundo096 vor 6 Jahren 1
damn it @ edmundo096 Ich habe die Umgebung entdeckt und war stolz darauf, diesen Beitrag zu markieren, aber dann fiel mir auf, dass dein Kommentar begraben wurde ... d'oh. +1, vielleicht wird es jetzt unbebaut :) Adam Plocher vor 5 Jahren 0
Es hakt überall perfekt! Die nützlichste Antwort des Monats! Danke vielmals! (ConEmu hat aufgehört zu arbeiten, aber es ist in Ordnung, ich singe gerade cmd) Vladimir Ishenko vor 5 Jahren 0
16
sgmoore

Wenn Sie nach dem normalen Beenden Ihrer Anwendung nichts in der Stapeldatei tun müssen, stellen Sie durch Verwendung des startBefehls sicher, dass die Stapeldatei bereits beendet ist, wenn Sie die Tastenkombination Strg-C drücken. Daher erscheint die Nachricht nicht.

Zum Beispiel:

@echo aus  setze mein_befehl = ping.exe setze meine_params = -t www.google.com  Befehl, der von 'start' ausgeführt werden soll:% my_command%% my_params%  :: Wenn Sie / B oder / WAIT NICHT verwenden, wird ein neues Fenster erstellt :: Die Ausführung dieser Batchdatei wird im aktuellen Fenster fortgesetzt:  start% my_command%% my_params%  Echo. Echo Diese Zeile wird ausgeführt, BEVOR der Start beendet ist. Also das Die Echo-Batch-Datei wird vor dem Drücken von Strg-C im anderen Fenster abgeschlossen. Echo.  :: Verwenden Sie zum Testen nur "Pause", um "Drücken Sie eine beliebige Taste, um fortzufahren" anzuzeigen :: die Ausgabe der 'Echo'-Befehle. Stellen Sie sicher, dass Sie im Fenster Strg-C drücken :: das den Befehl 'ping' ausführt (nicht in diesem Fenster). Oder einfach entfernen :: die nächste Zeile bei Verwirrung:  Pause 

(Getestet unter Windows XP.)

Ich weiß nicht, ob "Start" tatsächlich helfen würde, aber es klingt für mich plausibel. Ich frage mich also, ob der Downvote impliziert, dass dies NICHT funktionieren würde? Oder vielleicht kennt der Downvoted-Befehl nicht den Windows-Befehl `` start` (oder insbesondere `start / wait` und` start / b`)? Siehe http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/start.mspx. Bitte erläutern Sie das Downvote. Arjan vor 15 Jahren 0
"start" funktioniert nicht. Immer wenn cmd eine Batchdatei ausführt, wird durch Antippen von Strg + C der aktuell ausgeführte Prozess beendet und die Frage angezeigt. Joey vor 15 Jahren 0
Ich kann nur sagen, dass es für mich funktioniert und der entscheidende Punkt ist, dass die cmd KEINE Batchdatei ausführt (weil sie fertig ist). sgmoore vor 15 Jahren 0
Aber könnte man den Antrag dann trotzdem abbrechen? Also: Kann man mit Strg-C die Anwendung beenden, die mit "start" aufgerufen wurde? (Klingt für mich immer noch plausibel ...) Arjan vor 15 Jahren 0
Ob Strg-C die Anwendung beendet, ist unabhängig davon, ob die Anwendung von einer Batchdatei ausgeführt wird oder nicht. Wenn Sie (in XP) beispielsweise c: \ windows \ system32 \ edit starten, reagiert es nicht auf die Strg-C, unabhängig davon, wie es ausgeführt wird. Die Defragmentierung reagiert jedoch auf die Strg-C. Am einfachsten testen Sie dies, indem Sie eine Batchdatei erstellen, in der einfach start defrag c angezeigt wird: sgmoore vor 15 Jahren 0
Ich bin dabei, eine alte Windows-Maschine zu booten, um zu beweisen, dass dies funktioniert, aber ich habe bereits zugesagt, und ich sage, es funktioniert nicht viel, denke ich ... Also, @vito, haben Sie diese Antwort jemals getestet? Das klingt wirklich nach der gewünschten Lösung! Arjan vor 15 Jahren 0
Okay, ich habe endlich einen alten Windows-Rechner gebootet, um diese Antwort zu bestätigen. Und sgmoore hat recht, wie ich es schon erwartet hatte. Arjan vor 14 Jahren 0
+1 arbeitet für mich. / B deaktiviert jedoch die Handhabung von Strg + C (was ärgerlich ist). Nick Bolton vor 14 Jahren 1
Dies ist in Ordnung, wenn Sie auf die Batchdatei doppelklicken. Was aber, wenn Sie die Batchdatei in der Konsole starten? Helgi vor 12 Jahren 3
(Wenn Sie von Windows 7 sprechen, wissen Sie nicht, ob dies auf XP anwendbar ist.) Der von * Microsoft * mit dem Befehl "start" beauftragte * undenkende * Entwickler hat die blöde Entscheidung getroffen, den ** Titel ** des Fensters obligatorisch und optional bei zu machen zur gleichen Zeit - auf ziemlich verwirrende Weise. Wenn also Ihr% my_command% in doppelten Anführungszeichen steht, wird er zum * Titel * des Fensters und der erste Parameter in% my_params% wird zum Befehl *. Um sicher zu gehen, benutze `start" some title here "% my_command%% my_params%`. Meistens verwenden Sie einfach "" "und verfluchen den Entwickler, dass er stattdessen die Option` / TITLE` oder `/ T` verwendet, um den Titel festzulegen. ADTC vor 9 Jahren 6
13
ViperGeek

Ich habe mit diesem Wunsch gekämpft, um die Aufforderung "Stapeljob beenden" zu vermeiden.

Meine letzte Epiphanie ist ein bisschen wie ein Handgriff (oder ein Konsolenfenster), indem eine Instanz durch eine cmd.exeandere ersetzt wird. Dies wird erreicht, indem der Befehl / das Programm via start cmd /kgefolgt von unmittelbar exitin der .BATDatei ausgeführt wird.

Das ursprüngliche Konsolenfenster wird ausgeblendet und das Ersatzfenster kann über Ctrl- sauber gestoppt werden C.

Betrachten Sie das folgende Beispiel traceroute, das durch Ctrl+ unterbrochen werden Ckann oder abgeschlossen werden kann, und den Benutzer an die C:\>Eingabeaufforderung zurückgibt:

@echo off  set timeout=100 if not "%2"=="" set timeout=%2  start cmd /k tracert -w %timeout% %1 exit 

Die Ersetzung eines neuen Befehlsinterpreters für die Umgebung ist zwar nicht jedermanns Sache, sieht aber für mich mit bloßem Auge gut aus.

+1 Ein sehr neuartiger Ansatz, und obwohl ich zustimme, dass ti kein exakter Ersatz ist, funktioniert er gut (obwohl Sie mich beunruhigt haben, als Sie Ihren Beitrag mit "als Ersatz für cmd.exe" begannen) - Sicherheitsalarme läuteten, bis ich zum Beispiel kam und erkannte Was du meintest) Basic vor 12 Jahren 0
Sie sollten `exit / b` verwenden, um das Batch-Skript zu beenden Sebastian Godelet vor 9 Jahren 0
@SebastianGodelet: Das ist im Allgemeinen ein guter Ratschlag, aber hier ist es tatsächlich beabsichtigt, das (ursprüngliche) Konsolenfenster _window_ zu schließen, da der Zielbefehl in einem _new_-Fenster gestartet wird. mklement0 vor 6 Jahren 1
7
Olegs Jeremejevs

Die Lösung von Gringo ist gut, funktioniert aber nicht gut mit Skripts, die die Argumentliste weitergeben (dh python myscript.py %*), da SHIFTkeine Aktualisierung erfolgt %*. Es gibt Problemumgehungen, aber sie haben bestimmte Einschränkungen.

Hier ist die Modifikation, mit der ich endete:

IF [%JUSTTERMINATE%] == [OKAY] ( SET JUSTTERMINATE= python myscript.py %* ) ELSE ( SET JUSTTERMINATE=OKAY CALL %0 %* <NUL ) 

99. (9)% einwandfrei.

Dies funktioniert nicht, wenn `myscript.py` von stdin lesen möchte. jamesdlin vor 7 Jahren 0
4
Joey

Siehe diese Stack Overflow-Frage .

Das Patchen von cmd.exe ist jedoch nichts, was ich dafür tun würde.

0

In meinem Fall war es die ping.bat-Datei, die sich in meinem Benutzerverzeichnis (C: \ Users \ in Vista oder C: \ Documents and Settings \ in XP) befand und den Batch-Job unbestimmt hielt.

Diese Batchdatei wurde ausgeführt, wenn ich an der Eingabeaufforderung, an der das aktuelle Verzeichnis mein Benutzerverzeichnis ist, Ping ausgeführt hat. Das Ping aus dem Ausführungsfenster oder aus dem Verzeichnis eines anderen Benutzers lief gut.

Die Datei wurde aus meinem Benutzerverzeichnis entfernt und das Problem wurde behoben!

0

Start funktioniert, aber jetzt wird das von der Stapeldatei geöffnete Fenster von den Optionen, die ich hatte, geändert und die "Eigenschaften" sind deaktiviert (reagiert nicht).