So verhindern Sie das automatische Schließen der Konsole nach der Ausführung der Batchdatei

510

Welchen Befehl kann ich am Ende einer Batchdatei einfügen, um das automatische Schließen der Konsole nach der Ausführung der Datei zu verhindern?

Joe
quelle
5
Es wäre gut, wenn Sie feststellen könnten, ob eine CMD-Datei durch Doppelklick im Explorer gestartet wurde (dann soll sie am Ende angehalten werden) oder ob sie über eine bereits geöffnete Befehlszeile gestartet wurde. Im späteren Fall (und insbesondere wenn es von einem anderen Programm ausgeführt wird) möchten Sie die Pause nicht. Ich habe keine gute Lösung für diesen Fall gefunden (und verwende normalerweise eine if% NOPAUSE% -Variable, aber dies funktioniert nur für übergeordnete Programme, nicht für Paremt-Shells).
eckes
1
Es gibt einen Weg: stackoverflow.com/questions/3551888/…
EM0

Antworten:

635

In Windows / DOS-Batchdateien:

pause

Dies druckt eine schöne "Press any key to continue . . . "Nachricht

Wenn Sie die "Press any key to continue . . ."Nachricht nicht möchten , gehen Sie stattdessen folgendermaßen vor:

pause >nul
Dave Bauman
quelle
14
Keiner der Vorschläge hier funktioniert für mich, wenn ich auf die Fledermausdatei doppelklicke. Es ist eine Serverumgebung (und ich muss das Skript darin ausführen), sodass sie das Verhalten hätten ändern können. Das ändert nichts an meinem Ziel. Um das Befehlsfenster offen zu halten, kann ich so die Fehlermeldung eingeben.
Henrik Erlandsson
1
Ja, das funktioniert je nach Umgebung nicht immer. Für eine robustere Lösung siehe meine Antwort unten. Im Wesentlichen einfach / p exitkey = "Drücken Sie eine beliebige Taste, um fortzufahren ..."
Steven Mark Ford
Seien Sie vorsichtig, wenn jemand Ihr Skript ohne das Konsolenfenster ausführt (z. B. über das vbscript), bleibt es hängen, bis Sie es über den Task-Manager beenden.
Andry
Wenn es so etwas wie Maven ist, benutze CALL, stackoverflow.com/a/52205298/4485678
Kevin Roy
Pause funktioniert hier perfekt
Davidson Lima
141

Kommt auf die genaue Frage an!

Normalerweise pauseerledigt der Job in einer .bat- Datei.

Wenn Sie möchten, dass cmd.exe nicht geschlossen wird, damit Sie weiter tippen können, verwenden Sie den cmd /kBefehl am Ende der Datei.

Rutger Nijlunsing
quelle
2
Wenn Sie Windows-Befehle über das Dialogfeld "Ausführen" ausführen, stellen cmd /kSie sie stattdessen vor Ihren Befehl. & cmd /kwird nicht funktionieren.
Noumenon
68

Wenn Sie möchten, dass cmd.exe nicht geschlossen wird und Sie weiterhin eingeben können, verwenden Sie cmd /k

Ich hatte gerade das Bedürfnis zu klären, was /k(von der Windows-Website) funktioniert:

/k : Führt den durch string angegebenen Befehl aus und fährt fort.

Also cmd /kohne Follow - up - Befehl am Ende der BAT - Datei wird einfach weiter cmd.exeFenster offen für die weitere Verwendung.

Andererseits wird pauseam Ende einer Batchdatei der Vorgang einfach angehalten und cmd.exebeim ersten Tastendruck beendet

Valentine Stone
quelle
24

Die folgende Möglichkeit, Befehle in einer Batchdatei zu haben, öffnet neue Eingabeaufforderungsfenster und die neuen Fenster werden nicht automatisch beendet.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2
user6928445
quelle
2
In meinem Fall hatte ich während der Ausführung des Terminalbefehls einen Fehler. Daher haben mir die Befehle 'pause' und 'cmd / k' nicht geholfen, die Fehlerursache des Programms zu stoppen. Dieses Beispiel hat mir geholfen zu zeigen, dass ich einen Fehler habe und auch ganz vom Terminal angehalten habe. Vielen Dank!
HowDoYouTellForAChild
19

Wenn Sie Maven verwenden und die Eingabe überspringen und verhindern möchten, dass die Konsole geschlossen wird, um das Ergebnis anzuzeigen, müssen Sie den CALLBefehl im Skript neben nur der 'mvn-Neuinstallation' verwenden.

So wird die Konsole geschlossen

ECHO This is the wrong exemple
mvn clean install
pause

So bleibt die Konsole offen

ECHO This is the right exemple
CALL mvn clean install
pause

Wenn Sie den CALLBefehl nicht verwenden, funktioniert keines der vergangenen Beispiele.

Andrey Hartung
quelle
1
Vielen Dank! Es verhindert, dass die Eingabeaufforderung geschlossen wird, wenn der Befehl fehlgeschlagen ist.
Timur Gilauri
1
Es hat bei mir funktioniert. Ich wollte 2 verschiedene Befehle in 1 Bat-Datei ausführen. aber meine Eingabeaufforderung wurde nach dem ersten Befehl geschlossen. Putting call <myCommand>löste dieses Problem: Meine Eingabeaufforderung wurde nach der ersten Ausführung nicht mehr geschlossen
Zombkey
1
Die nützlichste Antwort
Gianmarcocalbi
14

Fügen Sie cmd.exeals neue Zeile unter dem Code hinzu, den Sie ausführen möchten:

c:\Python27\python D:\code\simple_http_server.py

cmd.exe
lyfing
quelle
Genau das habe ich gesucht, danke! Die "Pause" funktioniert einfach nicht, wenn Ihr Python-Skript abstürzt. Ich wollte eine Fehlermeldung sehen. Bis jetzt musste ich meine Python-Skripte über die Konsole
ausführen
Aber das funktioniert gut:python script.py %1 && cmd
user70960
Vielen Dank! Das hat geholfen! Ich habe eine Batch-Datei erstellt, um Python-Anwendungen auszuführen.
fez.tival
10

Mein Weg ist es, einen tatsächlichen Stapel (mit der Aufschrift "foo.bat") zu schreiben, um den Job zu beenden. dann erstelle eine weitere "start.bat":

@echo off
cmd /k foo.bat

Ich finde das äußerst nützlich, wenn ich einmalige Umgebungsvariablen einrichte.

Erich Chen
quelle
1
Sie können einfach cmd /k(ohne Befehl) am Ende der foo.batDatei setzen und diese ausführen. Sie benötigen keine separate start.batDatei.
ADTC
9

Rufen Sie cmdam Ende der Batch-Datei auf.

user4155296
quelle
5

außerdem pause.

set /p=

kann verwendet werden. Es werden Benutzereingaben erwartet und der Fluss wird freigegeben, wenn die Eingabetaste gedrückt wird.

oder

runas /user:# "" >nul 2>&1

Dies wird dasselbe tun, außer dass nichts aus der Benutzereingabe angezeigt wird oder im Befehlsverlauf verbleibt.

npocmaka
quelle
3

Möglichkeit 1: Erstellen Sie einfach 2 .bat-Dateien und schreiben Sie in die erste:

start <filename> // name of 2nd batch file
exit

Batch-Datei 2 ist die Datei, die am Ende nicht geschlossen wird. Wenn Sie also Batch Nr. 1 öffnen, wird der 2. gestartet und sich selbst geschlossen. Wenn der 2. beendet ist, wird er nicht vollständig geschlossen (solange Sie am Ende keinen Ausgang setzen).

Möglichkeit 2: Batchdatei 1:

call <filename>
cls
echo End of file
pause
<any code you want>

Wenn die 2. Datei endet, fährt sie erneut mit Datei 1 fort und gibt den Rest aus. Damit können Sie sogar Fehlerbehandlungsroutinen erstellen. Wenn nr.1 abstürzt, geht es in nr.2 und zeigt es an

BlazeLP
quelle
2

Dieser kleine Hack fordert den Benutzer auf, einen Schlüssel einzugeben und in der Variablen% exitkey% zu speichern (diese Variable kann jedoch als beliebig bezeichnet werden).

set /p exitkey= "Press any key to continue..."

NB: Das Leerzeichen nach dem '=' ist sehr wichtig

Steven Mark Ford
quelle
2
pause

oder

echo text to display
pause>nul
Zenedus
quelle
2

Ich weiß, dass ich zu spät bin, aber mein bevorzugter Weg ist:

:programend
pause>nul
GOTO programend

Auf diese Weise kann der Benutzer nicht mit enter beenden.

Dekadenz
quelle
Ich denke ja, da dies eine verbesserte Möglichkeit ist, das Schließen der Konsole zu verhindern. Auch wenn der Benutzer eine Taste drückt, bleibt die Konsole geöffnet. Der Benutzer wird nur durch Schließen des Konsolenfensters zum Beenden gezwungen.
Decadenza
2

Hatte Probleme mit den Antworten hier, also habe ich mir das ausgedacht, was für mich (TM) funktioniert:

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause
lama12345
quelle
1

Je nach Anwendungsfall gibt es zwei Möglichkeiten

1) Wenn Sie möchten, dass die Windows-Cmd-Eingabeaufforderung geöffnet bleibt, damit Sie das Ausführungsergebnis sehen und anschließend schließen können; verwenden

pause

2) wenn Sie möchten, dass die Windows-Cmd-Eingabeaufforderung geöffnet bleibt und Sie einige Befehlsnachwörter ausführen können; verwenden

cmd

Geben Sie hier die Bildbeschreibung ein

Hitesh Sahu
quelle
1

Einfach, fügen Sie cmd zu Ihrer letzten Fledermauszeile hinzu, ABER! Wenn Sie Ihren Systempfad zurücksetzen oder löschen, müssen Sie Ihr cmd mit dem vollständigen Pfad beginnen, wie z.

%windir%\system32\cmd.exe

Zum Beispiel habe ich eine Bat-Datei, um JDK auf die alte Version wie folgt zurückzusetzen:

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

Da ich den Systempfad zurückgesetzt habe, muss ich cmd mit dem vollständigen Pfad ausführen. Andernfalls kann das System cmd.exe nicht finden. Cmd kann nicht ausgeführt werden. Schließen Sie einfach das Fenster, und die Fehlermeldung wird nicht angezeigt .

Wei Kleeff
quelle