Erläuterung:
Hier ist, wie es funktioniert; Eine Batch-Datei wird zeilenweise verarbeitet. Jeder Befehl wird der Reihe nach ausgeführt und der Stapelverarbeiter wartet, bis ein Befehl beendet ist, bevor er den nächsten startet. Das Problem besteht darin, dass die von Ihnen gestartete Java-Anwendung (Jilko.jar) ein Fensterprogramm ist, das auch nach dem Start der Zeile ausgeführt wird. Wenn es sich um ein Tool handelt, das eine Aktion ausführt und dann beendet wird, wird die Batchdatei mit dem nächsten Befehl fortgesetzt (oder beendet, wenn keine weiteren vorhanden sind). Da das Programm noch ausgeführt wird, wartet der Stapelverarbeiter, bis das Fenster geschlossen ist, bevor er fortfährt. Sie können dies in Aktion sehen, indem Sie das Java-Programm beenden: Das Konsolenfenster mit der Batch-Datei wird geschlossen.
Lösung:
Um das Problem zu beheben, müssen Sie den Batch-Prozessor anweisen, das Programm zu starten und fortzufahren, ohne darauf zu warten:
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
Wie Terrance erwähnt hat , ""
ist dies der Titel, der für das Konsolenfenster verwendet werden soll. Es ist jedoch nur optional, wenn der Befehl nicht in Anführungszeichen steht. Andernfalls ist erforderlich . Sie können dort etwas einfügen, wenn Sie möchten, oder es leer lassen. Wenn der Befehl jedoch in Anführungszeichen steht, muss er vorhanden sein. Andernfalls behandelt der Befehlsinterpreter den in Anführungszeichen angegebenen Befehl als Titel und öffnet eine Konsole, die nur darauf wartet etwas zu tun.
Sie können stattdessen den folgenden Befehl verwenden, die Anführungszeichen sind jedoch einfacher und sicherer, da die Kurznamen nicht auf allen Systemen garantiert gleich sind.
start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar
Der start
Befehl ist ein integrierter Befehl, der einen Prozess erzeugt (im Grunde genommen wie das Ausführen eines Programms über das Startmenü). In diesem Zusammenhang führt der Stapelverarbeitungsprozessor den start
Befehl aus, der seinerseits das angegebene Programm ausführt und beendet (selbst, nicht das erzeugte Programm). Der Batch-Prozessor wird daher wie erwartet fortgesetzt. Es gibt auch einige Optionen, die nützlich sein können, beispielsweise das Ausführen des Programms minimiert ( /min
) oder maximiert ( /max
), das Ausführen mit niedriger Priorität ( /low
) und so weiter. Siehe start /?
für weitere Einzelheiten.
nohup
Ich habe festgestellt, dass einige der Programme, die ich starte, Prozesse laufen lassen und das Konsolenfenster erst dann geschlossen wird, wenn sie beendet werden, wenn ich sie nur durch Starten der ausführbaren Datei starte.
Das START-Programm behebt das, aber das alte Problem mit START gibt es immer noch. Sie können nicht nur verwenden:
Der erste Parameter von START ist immer noch der Fenstername. Wenn Sie es weglassen, öffnen Sie einfach eine CMD-Konsolenbox mit dem Namen des Fensters, das Sie zu starten versucht haben. In der obigen Instanz hätte ich jetzt ein Konsolenfenster mit dem Fenstertitel " c: \ Mein Verzeichnis \ MeineDatei.exe ". Nicht was ich wollte!
Um den Fensternamen wegzulassen, verwenden Sie einfach doppelte Anführungszeichen, um eine leere Zeichenfolge zu definieren, z.
Beenden Sie Ihre Batch-Datei schließlich mit einem EXIT-Befehl, um sicherzustellen, dass sie geschlossen wird.
Diese Methode scheint in Windows 7 und 8 konsistent zu funktionieren.
Bei der Fehlersuche finde ich, dass das Hinzufügen eines ECHO von dem, was ich tun werde, und eines TIMEOUT von dem, was ich gerade getan habe, sehr hilfreich ist. Beispielsweise:
Da das Timeout einen Countdown anzeigt, müssen Sie nicht ECHO ausführen, um zu verzögern.
quelle
Auch - Einsatz EXIT jederzeit, unter Windows 7, als nur bis zum Ende der Batch - Datei bekommt nicht unbedingt es beenden - wie in früheren Windows - Versionen. Windows 7 reagiert möglicherweise empfindlicher als frühere NT-Versionen (z. B. Windows 2000 Professional). Dies wurde in einigen, aber nicht in allen vorherigen Antworten erwähnt.
Angaben zur persönlichen Erfahrung zur Unterstützung der Antwort:
Nach dem Übertragen einer StarOffice5.2-Installation von Windows 2000 auf Windows 7 wurden beim Beenden der Suite Speicherplatzfehler gemeldet. Dies wurde in Windows 2000 nicht gesehen.
Vor Jahren hatte ich Batch-Dateien geschrieben, um die Datei soffice.ini automatisch zu sichern und wiederherzustellen, damit bei Beschädigung eine Reparatur möglich ist (häufig genug, um ein Problem zu sein - die Suite kann nicht geladen werden). Die automatische Sicherung (ausgelöst durch eine Verknüpfung mit der Batch-Datei, die sich in Office52 \ user \ config \ startup befindet) erfolgt jedoch erst nach einer Verzögerung von 5 Sekunden. Ich bemerkte, dass die Beendigung der Suite ohne Fehler verlief, wenn ich die Suite kurz vor der Ausführung der Batch-Datei verließ. Dies wies mich auf ein Problem in den Batchdateien hin.
Nachdem der Befehl 'EXIT' als letzte Zeile in den Stapeldateien eingefügt wurde, wurde die Office-Suite zu jeder Zeit ohne Speicherplatzfehlermeldungen beendet, unabhängig davon, ob die Stapeldateien ausgeführt wurden oder nicht.
quelle
Sobald die App fertig ist, sollte sie beendet werden. Sind Sie sicher, dass die Java-App ordnungsgemäß beendet wird?
quelle
Ich habe mich nur mit dem gleichen Problem befasst und es hat sich schließlich von selbst gelöst, nachdem scheinbar zufällige Änderungen an der Batchdatei vorgenommen wurden. Ich verstehe nicht, warum, aber ich werde es hier posten, falls es später jemand anderem hilft.
Ich benutze das SysInternals Pskill- Dienstprogramm und das Sleep- Dienstprogramm, da XP Home nicht viel in Bezug auf die Befehlszeilenfunktionalität enthält .
Dies ist die Batchdatei, die nach Abschluss des Vorgangs tatsächlich geschlossen wird:
Wenn ich die letzten Zeilen so geändert hätte, würde das Cmd-Fenster geöffnet bleiben, bis ich auf das 'X' in der Ecke klickte:
Selbst wenn ich versuchte, pskill aufzurufen, um sich selbst zu töten, verschwand der Prozess cmd.exe aus dem Task-Manager, und pskill meldete in cmd.exe, dass der Prozess cmd.exe beendet wurde, und das
cmd.exe
Fenster blieb dennoch bis zum nächsten Schritt aktiv Ich habe auf das 'X' in der Ecke geklickt:Nachdem ich
&& exit
jede Zeile ergänzt hatte, bemerkte ich, dass einige von ihnen darauf reagierten und die Stapelverarbeitung unterbrachen, während andere dies nicht taten.Also habe ich einfach eine der reaktionsschnellen am Ende eingefügt, anstatt wie ich es ursprünglich hatte.
Wie gesagt, ich weiß nicht warum, bin aber froh, dass das vorbei ist.
quelle
Versuchen:
cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
quelle
So habe ich es gemacht:
Erstellen Sie eine Batchdatei mit folgendem Inhalt:
Fügen Sie in Ihrem Exit-Eingabestream Folgendes hinzu:
quelle
Windows 2003 verfügt standardmäßig über keine "Benutzerkonten" in der Systemsteuerung. Ich habe einen kurzen Stapel geschrieben, um Benutzerkonten zu eröffnen:
Es funktionierte einwandfrei, die Benutzerkonten wurden geöffnet, aber das CMD-Fenster blieb ebenfalls geöffnet. Nach einigen Recherchen hier habe ich an den Anfang von Zeile 2 Folgendes angefügt: START "":
Jetzt wird das Fenster Benutzerkonten geöffnet, bleibt geöffnet und das CMD-Fenster wird geschlossen. Kinderleicht.
quelle
Ich habe nach einer Lösung gesucht, um ein Stapelverarbeitungsfenster zu schließen, wenn der Befehl EXIT das Fenster aus einem unbekannten Grund geöffnet lässt. Endlich bin ich auf eine Lösung gestoßen.
Entfernen Sie EXIT vom Ende der Batch-Datei und verwenden Sie:
quelle
Ich habe auf einem 32-Bit-Computer mit Windows 7 eine Batch-Datei für die Nettonutzung erstellt, und der Befehl der Batch-Datei wird nach der Ausführung nicht beendet. Ich führe dieselbe Batchdatei auf einem anderen Windows 7 64-Bit-Computer aus, und der Befehl der Batchdatei wird normal beendet.
Ich habe Bryans Vorschlag ausprobiert und er funktioniert auf diesem 32-Bit-Computer mit Windows 7 nicht, da es keinen conhost.exe-Prozess gab. Ich habe ihn folgendermaßen geändert:
Die Batchdatei für die Nettonutzung wird nicht immer normal beendet und es wird nach dem Zufallsprinzip die Bestätigung "Batchjob beenden (J / N)" angezeigt .
Entsprechend diesem Thread habe ich die Batch-Datei wie folgt geändert:
Die net use Batch-Datei wird schließlich normal beendet.
quelle