Programm beenden(taskkill) aber nur, wenn das Programm eine Zeile höher beendet wurde

o0Pascal0o

Bruder von Johnny English
Hallo,

ich möchte ein Programm beenden, dieses jedoch nur, wenn das Programm, welches davor gestartet wurde beendet wurde.

Bislang sieht es so aus, jedoch wird die programm.exe immer gestartet, so dass nachher die programm.exe öfter gestartet ist.
Code:
@echo off
start programm1.exe
start programm2.exe
taskkill /f /im programm.exe
exit
Momentan startet der Programm1 & Pgoramm2, jedoch wird Programm1 sofort wieder geschlossen. Obwohl Programm2 noch läuft.

Vielen Dank

Pascal
 
Zuletzt bearbeitet:
Windows verrät es:

c:\>help start
[...]
WAIT Startet die Anwendung und wartet auf das Ende.
 
Dir steht der /wait - Parameter nicht bei der start Funktion zur Verfügung?
Bei meinem XP prof SP3 ist es vorhanden...
Sorry, wenn ich nicht weiterhelfen konnte!
 
Hmm.. danke, nein. Nach dem Befehl "vol" kommt "xcopy". Und die Liste ist ja alphabetisch. Ich habe WinXP SP3 deutsch.
 
vol und xcopy? :unsure:
Jetzt steige ich gar nicht mehr durch, das taucht in der Liste der Parameter des Start-Befehls gar nicht auf.
Hier zur Sicherheit nochmal ein Screenshot, was Du eingeben musst und wie das dann aussieht:

help_start.jpg
 
Hi,

das ganze könnte man auch so lösen:
Code:
@echo off
start programm1.exe
start programm2.exe
:wait
tasklist | find /i "programm1.exe" >nul
if not %errorlevel%==0 goto wait
taskkill /f /im programm2.exe
exit

Also: Programm1 wird gestartet, Programm2 auch. Dann wird geprüft, ob programm1.exe noch aktiv ist. Wenn ja, wird wieder geguckt und wieder geguckt und wieder geguckt, in einer Endlosschleife praktisch.
Wenn programm1.exe aber nicht mehr aktiv ist, wird programm2.exe geschlossen :).

Ich hoffe, dass dir das noch hilft und Gruß
bastla
 
lol, geil. Das funktioniert wunderbar. Danke Dir bastla!

:Edit:
Meine alte Batch wurde minimiert gestartet. Deine neue jetzt maximiert. Wie kann ich das noch hinbekommen?
 
Danke für dein Lob! Ich helfe gerne :).

:Edit:
Meine alte Batch wurde minimiert gestartet. Deine neue jetzt maximiert. Wie kann ich das noch hinbekommen?
Hm, das ist komisch! Normalerweise werden alle Batchdateien immer maximiert gestartet. Hast du deinen alte Batch denn aus einem anderen Programm heraus gestartet?

Aber man kann eine neue Batch erstellen, die die eigentliche Batch minimiert startet:
Code:
@echo off
start /min Batchdatei.bat
exit /b

Ich hoffe das hilf und Gruß
bastla
 
Du hast natürlich recht. Ich habe eine andere gestartet & daher ist die 1. immer direkt weg & die 2. habe ich minimiert gestartet - so wie in deinem Tipp. Danke.
 
Mir ist da was aufgefallen:

Und zwar hast du, bastla, die Abfrage so gestaltet, dass eine Schleife so lange läuft, bis das Programm beendet ist.
So eine Schleife kann aber eine Menge Leistung abfordern, daher wäre es sinnvoller, eine Zeile einzufügen, die dem Programm sagt, dass es kurz warten soll.


Das ganze würde dann so aussehen:


Code:
@echo off
start programm1.exe
start programm2.exe
:wait
tasklist | find /i "programm1.exe" >nul
ping 127.0.0.1 -n 1>nul
if not %errorlevel%==0 goto wait
taskkill /f /im programm2.exe
exit

Das über ping zu machen ist zwar etwas unelegant, aber ich weiß den Befehl nicht mehr, der extra dafür gemacht ist und ich glaube, den gibt es auch erst ab Win 7, bzw. Vista.
Bastla, weißt du da was, sonst durchsuche ich nochmal meine verstaubten Batch-Fateien.^^
 
@Palladin:
Danke für die Ergänzug - mit Ping ist echt etwas umständlich :D. Aber seit Vista kannst du auch "timeout /t [Zeit]" benutzen ;).
Du darst aber auf keinen Fall dein Ping in dieser Zeile einbauen, da du mit deinem >nul beim Ping das errorlevel von tasklist wegnimmst, was aber noch gebraucht wird :)
Entweder nach der if-Abfrage einbauen (geht schlecht), daher ganz zu Anfang direkt unter der Sprungmarke ;)

@Pascal:
Ich meine mich zu erinnern, dass du XP benutzt, in diesem Fall hätte ich dir auch die sleep.exe empfohlen :).

Aber by the way:
So viel Leistung verbraucht die Schleife eigentlich gar nicht, ist ja nur lesen und nicht schreiben :).
ot:
Was mir gerade einfällt: Ich hatte mal eine Zeit lang so eine Batch im Hintergrund laufen, da es Programme gibt, die unerwünscht andere Programme starten :D. Meine Rechenleistung hat sich nicht merklich verschlechtert :).


Man könnte alternativ aber auch noch einen Zähler einbauen, der dann nach dem 60. Mal durchlaufen der Schleife eine Zwangspause einlegt :)

Gruß
bastla
 
Stimmt, so hieß das ab Vista^^

Du darst aber auf keinen Fall dein Ping in dieser Zeile einbauen, da du mit deinem >nul beim Ping das errorlevel von tasklist wegnimmst, was aber noch gebraucht wird :)

Daran habe ich jetzt ehrlich nicht gedacht.
Ich merke schon, dass ich lange nicht mehr mit Batch gearbeitet habe ^^
 
Oben