Batch Datei zum Starten und Schließen

Chiller87

Lieutenant
Registriert
Apr. 2005
Beiträge
816
Servus Leute,

ich wollte mir eine .bat schreiben mit der ich mehrere Programme starten und beenden kann.
Das mit dem starten habe ich hinbekommen, nur für das Beenden finde ich nicht den richtigen Befehl.

Wäre Super wenn mir Jemand helfen kann.

Hier mal der Inhalt der Datei :

start "" "D:\Gamezz\Steam\Steam.exe"
start "" "D:\Program Files (x86)\ICQ6.5\ICQ.exe"
start "" "D:\Program Files (x86)\Skype\Phone\Skype.exe"
start "" "D:\Program Files\TeamSpeak 3 Client\ts3client_win64.exe"

Starten klappt wunderbar.
Wie muss das aussehen um die Programme zu Beenden?

mfg

chiller
 
taskkill /?

Edit:
HLK ist mir zuvorgekommen :(

Andere Möglichkeiten wären Oberflächenscripts mit Autoit oder VBScript.
 
Zuletzt bearbeitet:
pstools (von microsoft) runterladen und dann mit pskill.exe
 
bei taskkill zu sich gar nichts, schaut jetzt so aus :

start "" "D:\Gamezz\Steam\Steam.exe"
start "" "D:\Program Files (x86)\ICQ6.5\ICQ.exe"
start "" "D:\Program Files (x86)\Skype\Phone\Skype.exe"
start "" "D:\Program Files\TeamSpeak 3 Client\ts3client_win64.exe"

taskkill "" "D:\Gamezz\Steam\Steam.exe"
taskkill "" "D:\Program Files (x86)\ICQ6.5\ICQ.exe"
taskkill "" "D:\Program Files (x86)\Skype\Phone\Skype.exe"
taskkill "" "D:\Program Files\TeamSpeak 3 Client\ts3client_win64.exe"

EDIT: hab windows 7 x64, weiß nicht ob es relevant ist.
 
@Chiller2005

Die Syntax deines Taskkills stimmt nicht, lies den post darüber nochmal und nimm die Parameter mit...
 
EDIT:

Besten Dank es Funktioniert!

Einmal run.bat :

start "" "D:\Gamezz\Steam\Steam.exe"
start "" "D:\Program Files (x86)\ICQ6.5\ICQ.exe"
start "" "D:\Program Files (x86)\Skype\Phone\Skype.exe"
start "" "D:\Program Files\TeamSpeak 3 Client\ts3client_win64.exe"

und einmal close.bat :

taskkill /F /IM Steam.exe
taskkill /F /IM ICQ.exe
taskkill /F /IM Skype.exe
taskkill /F /IM ts3client_win64.exe
 
Zuletzt bearbeitet:
Und wie beende ich Steam nach dem ich das Spiel beendet habe autoamtisch wieder? So wird das Spiel erst gar nicht gestartet, weil Steam direkt wieder beendet wird:

Code:
@echo off
start steam://rungameid/320040
taskkill /F /IM Steam.exe
exit

Mache ich das gleiche mit einer exe, dann wartet taskkill bis, ich die exe beendet habe. Also so wie ich das möchte:
Code:
@echo off
"D:\Steam\SteamApps\common\Moon Hunters\moonhunters.exe"
taskkill /F /IM Steam.exe
exit
 
Die exe wird wohl schneller abgearbeitet, als der Weg über die Steam-ID. Wenn man den Steam-Link im Browser eingibt, wird dieser erst über den Steam Client Bootstrapper geöffnet (so bei der Batch wohl auch?!)

Das ist auch zu langsam:
Code:
@echo off
D:\Steam\Steam.exe -applaunch 320040
taskkill /F /IM Steam.exe
pause

Einen Timeout einbauen:
Code:
@echo off
start steam://rungameid/320040
timeout 10
taskkill /F /IM Steam.exe
exit
 
Danke Dir, ryan! Das funktioniert auch nur halb. Das Spiel wird gestartet & bleibt gestartet, doch nach 10 Sekunden schließt Steam wieder. Steam soll aber erst geschlosen werden, wenn das Spiel geschlossen wird. Wenn ich die Spiel.exe in die Batch schreiben würde, klappt das.
Code:
@echo off
"D:\Steam\SteamApps\common\Moon Hunters\moonhunters.exe"
echo Jetzt würe "taskkill /F /IM Steam.exe" ausgeführt. Also erst wenn ich die moonhunters.exe beende.
exit
Jedoch startet dann ja Steam nicht, was einige Spiele nicht mögen.
 
Mit dem Code startest du moonhunters als Kindprozess der CMD, oder? Deshalb wartet das Script bis Moonhunters "fertig ist" du es also beendest.

Bau eine Schleife mit Timeout und schau in der mit tasklist nach ob Moonhunters noch läuft, wenn nicht Steam killen.
Ergänzung ()

Also Pseudocode:
start Steam app
Timeout 10
while(tasklist /xx moonhunters.exe == true) Timeout 10
kill Steam
 
Zuletzt bearbeitet:
Danke Dir heulendoch! So habe ich das jetzt probiert:
Code:
@echo off
start steam://rungameid/320040
timeout 30
while(tasklist /xx moonhunters.exe == true) timeout 10
taskkill /F /IM Steam.exe
Das ist das Ergebnis:
Code:
Gewartet wird  0 Sekunden. Weiter mit beliebiger Taste...
Der Befehl "while" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
ERFOLGREICH: Der Prozess "Steam.exe" mit PID 3192 wurde beendet.
1. Das Spiel wird gestartet.
2. Steam wird beendet.
3. Das Spiel läuft noch.

Moonhunters beenden kann ich so:
Code:
@echo off
taskkill /F /IM Moonhunters.exe
exit

Das Ziel wäre aber:
1. Das Spiel wird gestartet
2. Steam bleibt gestartet
3. Das Spiel wird manuell beendet
4. Steam wird automatisch beendet
 
Bitte den Befehlssatz für Batch beachten : while => wenn schon ausgeworfen wird, daß der Befehl falsch geschrieben oder nicht gefunden wurde, ne ne ne.

Anhand vom Spiel Sentinels of the Multiverse:
Code:
@echo off
"C:\GAMES\Steam\steamapps\common\Sentinels of the Multiverse\Sentinels.exe"

:ANFANG
tasklist /FI "IMAGENAME eq Sentinels.exe" 2>NUL | find /I /N "Sentinels.exe">NUL
if "%ERRORLEVEL%"=="1" taskkill /F /IM steam.exe && EXIT
GOTO ANFANG
 
Supi! Danke!! So klappt es:
Code:
@echo off
start steam://rungameid/320040
timeout 30
:ANFANG
tasklist /FI "IMAGENAME eq Moonhunters.exe" 2>NUL | find /I /N "Moonhunters">NUL
if "%ERRORLEVEL%"=="1" taskkill /F /IM steam.exe && EXIT
GOTO ANFANG
exit
Ich blicke nicht so ganz durch, was die Zeile nach :ANFANG macht. Ist das sehr rechenaufwändig? Könnte man z.B. eine höhere Frequenz einstellen um Rechenzeit zu sparen? Es ist völlig egal, ob jede Sekunde oder jede Minute überprüft wird, ob die Moonhunters.exe noch läuft. Beduetet "2>NUL" -> alle 2 Sekunden wird überprüft?
 
ah danke. Also wenn ich ein Timeout for GOTO ANFANG setze, dann setze ich den Rechenaufwand herunter? Weil ansonsten die Schleife quasi im millisekundenbereich überprüft ob Moonhunters.exe noch läuft?
 
Genau, ansonsten würde geprüft ob die EXE noch läuft und das immer wieder ohne Pause. Mit Timeout an der Position machst du eine Pause vor der nächsten Prüfung.
 
2>NUL
anhängen, um Fehlermeldungen zu untertdrücken

:Anfang
GOTO Anfang
Damit kann man einen Befehl in eine Dauerschleife versetzen, indem das Programm, von der Zeile GOTO entsprechend wieder dahinspringt

Timeout
Der Timeout muß in die Schleife, da ja sonst das Programm nur einmalig verzögert. In der Schleife wird die Ausführung dann immer wieder entsprechend verzögert.

start moonhunters
timeout
:Anfang
GOTO Anfang
=> da wird einmalig ein Timeout gemacht (wegen der :ANFANG-Dauerschleife)

start moonhunters
:Anfang
timeout
GOTO Anfang
=> laufend, da der timeout in der Dauerschleife ist
 
Zurück
Oben