Drücken Sie zweimal Ctrl+ C.
Wie unterdrücken Sie die Bestätigung "Batch-Job beenden (J / N)"?
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?
16 Antworten auf die Frage
- Beliebte
- Neu
- Mit Kommentaren
- Aktiv
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.
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.cmd
im 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 )
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!
Wenn Sie nach dem normalen Beenden Ihrer Anwendung nichts in der Stapeldatei tun müssen, stellen Sie durch Verwendung des start
Befehls 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 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.exe
andere ersetzt wird. Dies wird erreicht, indem der Befehl / das Programm via start cmd /k
gefolgt von unmittelbar exit
in der .BAT
Datei 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.
Die Lösung von Gringo ist gut, funktioniert aber nicht gut mit Skripts, die die Argumentliste weitergeben (dh python myscript.py %*
), da SHIFT
keine 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.
Siehe diese Stack Overflow-Frage .
Das Patchen von cmd.exe ist jedoch nichts, was ich dafür tun würde.
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!
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).
Verwandte Probleme
-
12
Warum wird der Ordner / winsxs so groß und kann er verkleinert werden?
-
2
Erhöhte Berechtigungen für Startanwendungen in Windows?
-
14
PDF Viewer unter Windows
-
7
Welche Windows-Dienste kann ich sicher deaktivieren?
-
8
Firefox PDF-Plugin zum Anzeigen von PDF-Dateien im Browser unter Windows
-
1
Windows verliert das Bildschirmlayout
-
1
Gibt es eine Möglichkeit, Installationen / Updates zu verhindern, die meine Festplatte mit kryptisch...
-
1
Wie kann ich von Ubuntu aus über das Netzwerk auf Windows Vista-Drucker zugreifen?
-
6
Log Viewer unter Windows
-
3
Windows-Hintergrundproblem mit zwei Bildschirmen