Wenn wir in cmd die Tastenkombination Strg + C drücken, wird die Zielanwendung beendet. Wenn die Zielanwendung jedoch aus einer Batchdatei aufgerufen wird, wird die Bestätigung "Batchjob beenden (J / N)" angezeigt. Ich kann mich nie an einen Fall erinnern, in dem ich den Batch-Job nicht beendet habe. Wie können wir diese Bestätigung überspringen?
windows
command-line
batch
Srikanth
quelle
quelle
N
. Ich bin gespannt, in welchem Szenario das Batch-Skript nach der Eingabe beendet wirdN
.-n
Schalter für Cygwin- Ping zu erinnern und ihn häufiger zu verwenden.Antworten:
AFAIK können Sie nicht, da dieses Verhalten beabsichtigt ist und vom Befehlsinterpreter gesteuert wird. Es gibt keine Methode, dies zu "mappen" oder sogar "abzufangen", es sei denn, Sie dekompilieren den Interpreter direkt und kompilieren ihn erneut.
quelle
start
wie sgmoore bei vorgeschlagen superuser.com/questions/35698/... scheint völlig in Ordnung , Abhilfe zu mir.Drücken Sie zweimal Ctrl+ C.
quelle
Ctrl
und tippen SieC
erneut im Vergleich zu schlagenY
dannEnter
.An dieser Stelle habe ich eine effektive Lösung gefunden:
Um dies nicht jedes Mal ausgeben zu müssen, habe ich ein zweites Skript erstellt, das
script.cmd
im selben Ordner wie die obige 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 andere Möglichkeit besteht darin, den folgenden Code oben in script.cmd einzufügen, der dasselbe in einer Datei tut:
quelle
@IF ""=="%1" (@%0 CALLED < nul) ELSE (@[your command])
. Ruft sich rekursiv auf, aber beim zweiten Mal mit einem Argument. Wenn Ihr Skript Argumente enthält, 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.Installieren Sie Clink und ändern Sie die Einstellung "terminate_autoanswer". Die Einstellungsdatei sollte hier sein :
C:\Users\<username>\AppData\Local\clink\settings
.Dies funktioniert dann "nur" mit jedem cmd.exe-Fenster. Sie müssen nicht ändern, was läuft oder auf andere Weise, da Huckepack auf cmd.exe stoßen.
Verdammt geil, IMO!
quelle
\cmder\config\settings
. Siehe die Ausgabe hier github.com/cmderdev/cmder/issues/1666Wenn Sie in der Stapeldatei nach der normalen Beendigung Ihrer Anwendung nichts mehr tun müssen, stellen Sie mit dem
start
Befehl sicher, dass die Stapeldatei bereits beendet ist, wenn Sie Strg-C drücken. Und daher wird die Nachricht nicht angezeigt.Zum Beispiel:
(Getestet unter Windows XP.)
quelle
start
das wirklich helfen würde, aber es klingt für mich plausibel. Also frage ich mich, ob die Ablehnung impliziert, dass dies NICHT funktionieren würde? Oder vielleicht kennt der Abgestimmte den Windows- Befehlstart
(oder insbesonderestart /wait
undstart /b
) nicht? Siehe dann microsoft.com/resources/documentation/windows/xp/all/proddocs/… . Bitte erklären Sie die Ablehnung?start
wird nicht funktionieren. Wenn cmd eine Batch-Datei ausführt, wird durch Antippen von Strg + C der aktuell ausgeführte Prozess beendet und die Frage angezeigt.start
Befehl zu codieren , traf die dumme Entscheidung, den Titel des Fensters gleichzeitig als obligatorisch und optional festzulegen - auf verwirrende Weise. Wenn Ihr%my_command%
also in doppelte Anführungszeichen eingeschlossen ist, wird dies zum Titel des Fensters und der erste Parameter%my_params%
zum Befehl . Verwenden Sie zur Sicherheitstart "some title here" %my_command% %my_params%
. Die meisten verwenden""
und verfluchen den Entwickler nur, weil sie nicht die Option/TITLE
oder/T
verwenden, um den Titel festzulegen.Ich habe mit diesem Wunsch gekämpft, die Eingabeaufforderung "Batch-Job beenden" für eine Weile zu umgehen.
Meine letzte Offenbarung ist ein bisschen wie ein Kinderspiel (oder ein Konsolenfenster), indem ich eine Instanz durch eine
cmd.exe
andere ersetze . Dies wird erreicht, indem der Befehl / das Programm über ausgeführt wird,start cmd /k
unmittelbar gefolgt vonexit
in der.BAT
Datei.Das ursprüngliche Konsolenfenster verschwindet und der Austausch kann man sauber über gestoppt werden Ctrl- C.
Stellen Sie sich das folgende Beispiel für ein
traceroute
Symbol vor, das durch Ctrl+ unterbrochen Coder abgeschlossen werden kann, um den Benutzer zurC:\>
Eingabeaufforderung zurückzukehren:Die Umgebungsersetzung eines neuen Befehlsinterpreters ist vielleicht nicht jedermanns Sache, aber mit bloßem Auge sieht es gut aus und funktioniert gut für mich.
quelle
exit /b
, um das Batch-Skript zuDie Lösung von Gringo ist gut, funktioniert aber nicht gut mit Skripten, die die Argumentliste (dh
python myscript.py %*
) durchlaufen , daSHIFT
sie nicht aktualisiert werden%*
. Es gibt Problemumgehungen , die jedoch bestimmte Einschränkungen aufweisen.Hier ist die Modifikation, mit der ich endete:
99. (9)% fehlerfrei.
quelle
myscript.py
von stdin gelesen werden soll.Siehe diese Frage zum Stapelüberlauf .
Das Patchen von cmd.exe ist jedoch nicht das, was ich dafür tun würde.
quelle
In meinem Fall war es die ping.bat-Datei, die sich direkt in meinem Benutzerverzeichnis befand (C: \ Users \ in Vista oder C: \ Documents and Settings \ in XP), die den Stapeljob unbestimmt hielt.
Diese Batchdatei wurde immer dann ausgeführt, wenn ich an der Eingabeaufforderung ping ausgeführt habe, wobei das aktuelle Verzeichnis mein Benutzerverzeichnis ist. Das Pingen aus dem Fenster "Ausführen" oder aus dem Verzeichnis eines anderen Benutzers lief einwandfrei.
Entfernte die Datei aus meinem Benutzerverzeichnis und das Problem wurde behoben!
quelle
Start funktioniert, aber jetzt wird das von der Batch-Datei geöffnete Fenster von den Optionen geändert, die ich hatte, und die "Eigenschaften" sind deaktiviert (reagieren nicht).
quelle
Leiten Sie einfach das Batch-Stdin auf null um, indem Sie <nul am Ende des Befehls hinzufügen.
quelle
Ich bin mit einer EXE-Datei darauf gestoßen, die beim Beenden ^ C auf den übergeordneten Stapel zu werfen schien, was dazu führte, dass die Eingabeaufforderung "Batch-Job beenden" auch bei einem sauberen Beenden angezeigt wurde.
Die von mir gewählte Lösung bestand darin, den Stapel mit "Start" auszuführen, ähnlich wie bei anderen Antworten, jedoch über eine PowerShell-Eingabeaufforderung (oder über die PowerShell-Interpreter-Methode von CMD, wenn Sie dies wünschen).
Es ist 2018 und in Windows 10 hat Microsoft damit begonnen, CMD durch PowerShell als bevorzugte Eingabeaufforderung zu ersetzen, sodass es standardmäßig in der GUI verfügbar ist.
Start
ist ein Alias für Start-Process .Wenn es ausgeführt wird, wird es nur gestartet und kehrt zurück. Wenn Sie den gestarteten Prozess beenden, wird keine Eingabeaufforderung zum Beenden des Batch-Jobs angezeigt.
Standardmäßig wird nicht gewartet, daher sind keine zusätzlichen Argumente nach dem Befehl und den zugehörigen Argumenten erforderlich.
Die Verwendung
start mything.exe -mythings -arguments
in meiner Charge hat einwandfrei funktioniert.In PowerShell-Skripten muss vor dem Start der Pfad angegeben werden, damit ich meine Batchdatei als ausführen kann
.\host.bat
.quelle
TCC / LE , ein kostenloser CMD-Ersatz (CMD ++), bietet die Option, die Eingabeaufforderung zum Beenden des Batch-Jobs zu unterdrücken. Sie finden die Option im TCC-Startkonfigurationsdialog :
Bildschirmfoto:
Wenn Sie noch nie von TCC / LE gehört haben, lesen Sie bitte die folgenden Informationen auf der Website:
Ich habe TCC / LE jahrelang benutzt und 4NT davor. Ich habe viel Liebe dazu und kann es weiterempfehlen. Der einzige Grund, warum ich es nicht mehr benutze, ist, dass ich jetzt fast ausschließlich PowerShell benutze.
quelle
Ein Hauptgrund, um den "Batch-Job beenden (J / N)" zu unterdrücken, besteht darin, ein Programm in einer Schleife auszuführen (z. B .: erneut ausführen, falls es abstürzt).
Diese https://stackoverflow.com/a/8185270/1170023 hat zu dieser Lösung geführt:
quelle
Wenn Sie das Hyper- Terminal verwenden, können Sie die Bestätigung am einfachsten unterdrücken, indem Sie das Hyper-Yes- Plugin hinzufügen .
quelle
Fügen Sie am Ende Ihres Skripts einfach den folgenden Befehl hinzu:
echo
Dadurch wird das Verhalten Ihres Skripts nicht "beschädigt", und CDM wird anscheinend nicht gefragt, ob Sie den Stapel beenden möchten.
quelle