2010-09-25 04:19:24 +0000 2010-09-25 04:19:24 +0000
25
25

Warum wird cmd nach der Ausführung einer Batch-Datei nicht beendet?

Warum wird cmd nach der Ausführung einer Batch-Datei nicht beendet?

Ich habe versucht:

"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

und

@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit

Antworten (11)

31
31
31
2010-09-25 07:28:36 +0000

Wenn die Java-App nicht beendet wird (z. B. wenn Sie die Batch-Datei zum Starten der Java-App verwenden), verwenden Sie den Befehl start, um sie zu starten:-

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Dies startet die Java-App und fährt mit der Ausführung der Batch-Datei fort, ohne auf das Ende der Java-App zu warten.

20
20
20
2012-01-26 01:17:52 +0000

Erläuterung:

So funktioniert es: Eine Batch-Datei wird Zeile für Zeile abgearbeitet. Jeder Befehl wird der Reihe nach ausgeführt und der Batch-Prozessor wartet, bis ein Befehl beendet ist, bevor er den nächsten startet. Das Problem, das Sie haben, liegt daran, dass die Java-Anwendung, die Sie starten (Jilko.jar), ein Fensterprogramm ist, das auch nach der Zeile, die es startet, weiterläuft. Wenn es sich um ein Tool handeln würde, das eine Aktion ausführt und dann beendet wird, würde die Batch-Datei mit dem nächsten Befehl fortfahren (oder sich beenden, wenn es keine weiteren gibt). Da das Programm noch läuft, wartet der Batch-Prozessor, bis das Fenster geschlossen wird, bevor er weitermacht. Sie können dies in Aktion sehen, indem Sie das Java-Programm beenden: Das Konsolenfenster mit der Batch-Datei wird dann geschlossen.

Lösung:

Was Sie tun müssen, um das Problem zu beheben, ist, den Batch-Prozessor anzuweisen, das Programm zu starten und ohne zu warten weiterzumachen:

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Wie Terrance erwähnte , ist das "" der zu verwendende Titel für das Konsolenfenster. Es ist jedoch nur optional, wenn der Befehl nicht in Anführungszeichen steht; ansonsten ist es erforderlich. Sie können etwas hineinschreiben, wenn Sie wollen, oder es leer lassen, aber wenn der Befehl in Anführungszeichen steht, muss er vorhanden sein, sonst behandelt der Kommando-Interpreter den in Anführungszeichen stehenden Befehl als Titel und öffnet eine Konsole, die nur dasitzt und darauf wartet, dass etwas passiert.

Sie können stattdessen etwas wie den folgenden Befehl verwenden, aber die Anführungszeichen sind einfach einfacher und sicherer, da die Kurznamen nicht garantiert auf jedem System gleich sind.

start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar

Der Befehl start ist ein eingebauter Befehl, der einen Prozess erzeugt (im Grunde wie das Ausführen eines Programms aus dem Startmenü). Was in diesem Zusammenhang passiert, ist, dass der Batch-Prozessor den Befehl start ausführt, der wiederum das angegebene Programm ausführt und beendet (sich selbst, nicht das gespawnte Programm). Der Stapelverarbeitungsprozessor fährt also wie erwartet fort. Er hat auch einige Optionen, die nützlich sein können, wie z. B. das Programm minimiert (/min) oder maximiert (/max) auszuführen, es mit niedriger Priorität auszuführen (/low) und so weiter. Siehe start /? für Details.

7
7
7
2013-05-15 23:43:30 +0000

Ich habe festgestellt, dass einige der Programme, die ich starte, Prozesse laufen lassen, und das Konsolenfenster wird nicht geschlossen, bis sie beendet werden, wenn ich sie einfach durch Starten der ausführbaren Datei ausführe.

Das START-Programm behebt das, aber das alte Problem mit START ist immer noch da. Sie können nicht einfach verwenden:

START "c:\my dir\myfile.exe"

Der erste Parameter von START ist immer noch der Fenstername. Wenn Sie ihn weglassen, öffnen Sie nur ein CMD-Konsolenfeld mit dem Fenster, das so heißt, wie Sie versucht haben, es zu starten. Im obigen Fall hätte ich jetzt ein Konsolenfenster mit dem Fenstertitel “c:\my dir\myfile.exe”. Nicht das, was ich wollte!

Um den Fensternamen wegzulassen, verwenden Sie einfach ein Paar doppelte Anführungszeichen, um eine leere Zeichenkette zu definieren, z. B:

START "" "c:\my dir\myfile.exe"

Schließlich beenden Sie Ihre Batch-Datei mit einem EXIT-Befehl, um sicherzustellen, dass sie geschlossen wird.

Diese Methode scheint unter Windows 7 und 8 konsistent zu funktionieren.

Bei der Fehlersuche hilft es mir sehr, ein ECHO für das, was ich gerade tun will, und dann ein TIMEOUT für das, was ich gerade getan habe, hinzuzufügen. Zum Beispiel:

ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5

Da der Timeout einen Countdown angibt, brauchen Sie kein ECHO zu machen, dass Sie gerade eine Verzögerung haben.

5
5
5
2012-01-26 00:59:18 +0000

Verwenden Sie unter Windows 7 außerdem immer EXIT, da das bloße Erreichen des Endes der Batch-Datei diese nicht unbedingt beendet - wie in früheren Windows-Versionen. Windows 7 ist hier möglicherweise empfindlicher als frühere NT-Versionen (z.B. Windows 2000 Professional). Dies wurde in einigen, aber nicht allen der vorherigen Antworten erwähnt.

Details der persönlichen Erfahrung zur Unterstützung der Antwort:

Nachdem ich eine StarOffice5.2-Installation von Windows 2000 auf Windows 7 übertragen hatte, erhielt ich beim Beenden der Suite Speicherplatzfehler. Dies wurde unter Windows 2000 nicht beobachtet.

Vor Jahren hatte ich Batch-Dateien geschrieben, um die soffice.ini automatisch zu sichern und wiederherzustellen, um eine Reparatur zu ermöglichen, wenn sie beschädigt wurde (was oft genug ein Problem darstellt - die Suite lässt sich nicht mehr laden). Die automatische Sicherung (ausgelöst durch einen Link auf die Batch-Datei, platziert in Office52\user\config\startup) erfolgt jedoch erst nach einer Verzögerung von etwa 5 Sekunden. Mir ist aufgefallen, dass immer dann, wenn ich die Suite kurz vor dem Ausführen der Batch-Datei beendete, die Beendigung der Suite ohne Fehler verlief. Dies wies mich auf ein Problem in den Batchdateien hin.

Nachdem der ‘EXIT’-Befehl als letzte Zeile in die Batch-Dateien gesetzt wurde, begann die Office-Suite, sich ohne Speicherplatz-Fehlermeldung zu beenden, und zwar immer, unabhängig davon, ob die Batch-Dateien gelaufen waren oder nicht.

2
2
2
2010-11-06 03:27:04 +0000

Ich hatte gerade mit dem gleichen Problem zu tun, und es löste sich schließlich selbst, nachdem ich scheinbar zufällige Änderungen an der Batchdatei vorgenommen hatte - ich verstehe nicht, warum, aber ich werde es hier posten, falls es später jemandem hilft.

Ich benutze das Dienstprogramm SysInternals Pskill und das Dienstprogramm sleep , da XP Home nicht viel an Kommandozeilenfunktionalität bietet.


Dies ist die Batchdatei, die tatsächlich geschlossen wird, wenn sie fertig ist:

@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit

Wenn ich die letzten Zeilen so geändert hätte, würde das cmd-Fenster offen bleiben, bis ich auf das ‘X’ in der Ecke klicke:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit

Selbst wenn ich versuchen würde, pskill aufzurufen, um sich selbst zu beenden, würde der cmd.exe-Prozess aus dem Task-Manager verschwinden, und pskill würde von innerhalb seiner cmd. exe, dass der cmd.exe-Prozess beendet wurde, doch das cmd.exe-Fenster blieb weiterhin bestehen, bis ich auf das “X” in der Ecke klickte:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe

Nachdem ich && exit zu jeder Zeile hinzugefügt hatte, bemerkte ich, dass einige von ihnen darauf reagierten und die Stapelverarbeitung unterbrachen, während andere nicht reagierten.

Also habe ich einfach eine der reagierenden Zeilen an das Ende gesetzt, anstatt wie ursprünglich vorgesehen.

Wie gesagt, ich weiß nicht, warum, aber ich bin froh, dass das jetzt vorbei ist.

2
2
2
2010-09-25 04:29:25 +0000

Sobald die App fertig ist, sollte sie beendet werden. Sind Sie sicher, dass die Java-App richtig beendet wird?

1
1
1
2010-09-25 04:51:34 +0000

versuchen:

cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

0
0
0
2015-10-16 12:53:17 +0000

Windows 2003 hat standardmäßig keine “Benutzerkonten” in der Systemsteuerung. Ich habe einen kurzen Batch geschrieben, um die Benutzerkonten zu öffnen:

@echo off  
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll  
exit

Es funktionierte, die Benutzerkonten wurden geöffnet, aber das CMD-Fenster blieb auch geöffnet. Nach einigen Recherchen hier, fügte ich: START “” an den Anfang von Zeile 2 wie folgt an:

@echo off  
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit

Jetzt öffnet sich das Benutzerkonten-Fenster, bleibt geöffnet und das CMD-Fenster schließt sich. Easy Peasy.

0
0
0
2016-01-01 06:06:20 +0000

Ich habe lange nach einer Lösung gesucht, um ein Batch-Datei-Fenster zu schließen, wenn der EXIT-Befehl das Fenster aus einem unbekannten Grund offen lässt. Ich bin schließlich auf eine Lösung gestoßen.

Entfernen Sie EXIT am Ende der Batch-Datei und verwenden Sie:

Taskkill /IM conhost.exe /F
0
0
0
2016-07-15 10:37:30 +0000

Ich habe eine Netzverwendungs-Batchdatei auf einem Windows 7 32-Bit-Rechner erstellt und die cmd der Batchdatei wird nach der Ausführung nicht beendet. Ich führe dieselbe Batch-Datei auf einem anderen Windows 7 64-Bit-Rechner aus und die cmd der Batch-Datei werden normal beendet.

Ich habe Bryans Vorschlag ausprobiert und es funktioniert auf diesem Windows 7 32-Bit-Rechner nicht, weil es keinen conhost.exe-Prozess gab, also habe ich ihn wie folgt geändert:

Taskkill /IM cmd.exe /F

Die net use Batch-Datei wird nicht immer normal beendet und zeigt die Bestätigung “Terminate batch job (Y/N)” zufällig.

Nach diesem thread habe ich die Batch-Datei wie folgt geändert:

@echo off

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
)

net use \Server\folder

Taskkill /IM cmd.exe /F

Die Netzverwendungs-Batchdatei beendet sich schließlich normal.

0
0
0
2014-06-21 17:43:16 +0000

Hier ist, wie ich es gemacht habe:

  1. Erstellen Sie eine Batch-Datei mit dem folgenden Inhalt:

  2. Fügen Sie innerhalb Ihres Exit-Input-Streams hinzu: