Batch und vbs dateien beenden

Ocram127

Ensign
Registriert
Apr. 2020
Beiträge
128
Hallo!

Ich habe mehrere batch und vbs dateien geschrieben, die hauptsächlich irgendwas in der CMD anzeigen. Manche davon laufen in einer endlosschleife immer weiter, und genau diese würde ich gerne mit einer weiteren Datei beenden. Ob die datei zum beenden eine Batch Datei, ein VBScript oder etwas anderes ist, ist mir eigentlich egal, ich würde damit einfach nur gerne die Scripte schließen.

Ich habe schon Taskkill in einer batchdatei ausprobiert, das hat aber den Skript nicht geschlossen. Hier der Code für die Datei "echoSchleife.bat"
Code:
@echo off
taskkill /F /IM echoSchleife.bat

Ich vermute mal, taskkill kann nur .exe dateien beenden, habt ihr vlt eine Idee wie ich das Schließen von .bat und .vbs Dateien umsetzen kann?
 
Eine Batchdatei ist kein Programm, daher kann man die nicht schließen. Batchdateien führen nur stapelweise Befehle aus. Einer deiner Befehle hält offenbar das cmd-Fenster nach der Ausführung offen. Finde den Befehl und passe deine Batchdatei so an, dass der letzte Befehl korrekt abgeschlossen wird und das Fenster schließt.
 
Die Endlosschleife ist ja gewollt und soll die ganze Zeit weiterlaufen. Das ganze soll durch eine zweite Datei zum Schließen quasi "interaktiv" gemacht werden.

Um das ganze vielleicht ein bisschen klarer zu machen:
Ich habe ein Programm in Java geschrieben, welches verschiedene Batch- oder vbs Dateien ausführt. Diese sollen sloange weiterlaufen, bis sie von dem Java Programm beendet werden (oder man das Konsolenfenster über das x oben rechts schließt, aber darum geht es mir nicht). Da ich es nicht geschafft habe das ganze mit java umzusetzen, dachte ich, vlt gibt es eine Möglichkeit, die Dateien über eine separate Datei zu schließen, welche dann von meinem Java Programm wieder ausgeführt wird, wenn der Endnutzer dies will.
 
Wow! Das ist so bemerkenswert kompliziert, um es freundlich auszudrücken, dass mir da die Worte fehlen. Wie wäre es, du würdest den Java-Code hier posten und beschreiben, wo dein Problem liegt. Das ist allemal besser, als hier über nicht vorhandene Batchdateien zu schreiben, die für etwas missbraucht werden, wofür sie nicht gemacht sind.

Und nebenbei: Das ist ein klassisches XY-Problem
 
Du musst ganz einfach die jeweilige Hostanwendung, also Cmd.exe bei Batches, oder bei Vbs Scripten die Wscipt.exe, abschiessen.
 
  • Gefällt mir
Reaktionen: DerTiger
Code:
public void dateiStart(String pfad) {
        URL url = getClass().getResource(pfad);
        File file = new File(url.getFile());
      
        try {
            d.open(file);
        } catch (IOException e) {
            new LaunchException(e);
        }
};
Das ist die Methode, welche die dateien ausführt. d ist eine java.awt.Desktop Variable. Von dieser Klasse wird allerdings keine Methode zum schließen bereitgestellt.

Tatsächlich hab ich das Problem schonmal in einem anderen Forum gepostet, dort meinte jedoch schon einer, dass das schließen schwierig wird, da ich mit meinem Java Programm keine richtige Kontrolle darüber habe.
Ergänzung ()

areiland schrieb:
Du musst ganz einfach die jeweilige Hostanwendung, also Cmd.exe bei Batches, oder bei Vbs Scripten die Wscipt.exe, abschiessen.
Und wie mache ich das?
 
Taskkill? Du hattest den Weg doch schon gefunden, nur kannst Du eben nicht das Script abschiessen, sondern musst den Prozess killen, der im Speicher auch ein Abbild besitzt. Und das ist bei Batches die Cmd.exe und bei Vbs die Wscript.exe.
 
Ok... meinst du dann bei batch dateien sowas wie "taskkill /F /IM cmd.exe"? Ich war mir dabei ziemlich unsicher, ob es schlau ist cmd.exe zu beenden. Oder geht es irgendwie, nur das einzelne Fenster des Skriptes zu schließen?

Evil E-Lex schrieb:
Und nebenbei: Das ist ein klassisches XY-Problem
Ja mag sein, mir konnte mit meinem Hauptproblem niemeand helfen, deswegen kam ich heute auf die Idee, es mit einer extra datei zu lösen. Falls du dich mit java auskennst, hast du eine Idee wie ich das mit java direkt umsetzen kann?
 
Wenn Du die Prozess-ID der Cmd-Instanz ermittelst, die den zu beendenden Batch ausführt, kannst Du per Taskkill gezielt genau diese Instanz beenden. Dann eben nicht mehr mit dem Parameter "/im" sondern mit dem Parameter "/pid" und der PID der zu beendenden Instanz.
 
  • Gefällt mir
Reaktionen: kartoffelpü
areiland schrieb:
Wenn Du die Prozess-ID der Cmd-Instanz ermittelst, die den zu beendenden Batch ausführt, kannst Du per Taskkill gezielt genau diese Instanz beenden. Dann eben nicht mehr mit dem Parameter "/im" sondern mit dem Parameter "/pid" und der PID der zu beendenden Instanz.
Und falls mehrere CMD-Instanzen laufen, könntest du aus dem Java-Programm z.B. unterschiedliche Window-Title übergeben, wonach man dann filtern kann:
1614269228461.png

Statt tasklist kann man dann natürlich auch taskkill nutzen. War nur zum zeigen...
 
Zuletzt bearbeitet:
taskkill ist für meinen geschmack nicht sehr elegant.
warum nicht in die batch / vbs datei eine kondition einbauen auf die geprüft wird und sie sich dann von selbst schließt?

"wenn C:\reichtjetzt existiert dann goto :eof"?

oder in der batch noch gleich die triggerdatei löschen lassen und -> exit.
 
  • Gefällt mir
Reaktionen: Ocram127
Zurück
Oben