# Programm über Batch ausführen und schließen



## MZ259 (28. Juni 2015)

*Programm über Batch ausführen und schließen*

Hallo zusammen,

ich habe ein kleines Problem beim Schreiben einer Batch-Datei. Und zwar habe ich bei Skyrim eine ENB über den ENB Injector laufen und möchte mir das Starten etwas angenehmer gestalten. Zuerst muss ich eine ENB Injector.exe starten und anschließend Skyrim über den SKSE-Loader (skse_loader.exe) starten. Wenn ich Skyrim beende schließe ich auch den ENB Injector wieder.

Um das zu vereinfachen möchte ich mir eine kleine Batch schreiben, die das für mich erledigt. Mein bisheriger Code lautet so:

start D:\Spiele\Valve\Steam\steamapps\common\Skyrim\ENBInjector.exe
sleep 100
start D:\Spiele\Valve\Steam\steamapps\common\Skyrim\skse_loader.exe

Das Einzige, was noch fehlt ist ein Befehl, der abwartet, bis Skyrim wieder geschlossen wird und anschließend den ENB Injector schließt. Kann mir da jemand weiter helfen? Google konnte mir leider nicht helfen, da "start /wait D:\Spiele\Valve\Steam\steamapps\common\Skyrim\skse_loader.exe" nicht funktioniert hat  oder mein Beenden-Befehl ("exit D:\Spiele\Valve\Steam\steamapps\common\Skyrim\ENBInjector.exe") falsch war.
Den sleep-Befehl habe ich aus Puffer eingebaut, damit mein Rechner Zeit hat den Injector zu starten.

Schonmal vielen Dnak für die Hilfe


----------



## Muletto (29. Juni 2015)

*AW: Programm über Batch ausführen und schließen*

@MZ259 Am Besten legst du eine Schleife an, die solange läuft, wie der Prozess skse_loader.exe noch auffindbar ist. Wenn dieser nicht mehr vorhanden ist, kannst du die ENB Injector Anwendung beenden lassen.

Edit: Habe dir mal was versucht zu tippen.  Das sollte eigentlich klappen. Hoffe das entspricht deinen Vorstellungen.  

:loop
timeout /t 2 /nobreak
tasklist | find "skse_loader.exe" > nul
if errorlevel 1 taskkill /f /im "ENB Injector.exe"
tasklist | find "ENB Injector.exe" > nul
if errorlevel 1 goto end
goto loop

:end
exit

Falls du den Quelltext nicht verstehst, frag ruhig. 

Gruß Muletto


----------



## Rho (30. Juni 2015)

*AW: Programm über Batch ausführen und schließen*

Das Script wird die CPU wohl fast schon mehr beanspruchen als Skyrim.


----------



## bschicht86 (30. Juni 2015)

*AW: Programm über Batch ausführen und schließen*



Rho schrieb:


> Das Script wird die CPU wohl fast schon mehr beanspruchen als Skyrim.



Dem stimm ich zu. Zumindest kann man ja noch vor "goto Loop" eine Sekunde Pause hinzufügen.


----------



## Muletto (1. Juli 2015)

*AW: Programm über Batch ausführen und schließen*

Stimmt Jungs, das habe ich komplett vergessen. Ich füge das mal oben ein.


----------



## MZ259 (2. Juli 2015)

*AW: Programm über Batch ausführen und schließen*

Sry hatte ein paar Tage Internetausfall
Ich werd's gleich mal einbauen und testen. Die CPU sollte dabei eher weniger Probelme machen, da sie meistens weniger gefordert wird, als die Garfikkarte, aber auch das werde ich testen.
Danke für die Hilfe.

Edit 1: Interessant... Der ENB Injector geht kurz auf, wieder zu, SKSE geht an und alles funktioniert, obwohl der ENB Injector nicht da ist 
Ob der ENB Injector nun an ist oder nicht, macht mir nichts aus, solange es (Ingame) so funktioniert, wie es soll. Durch ausprobieren habe ich herrausgefunden, dass der "skse_loader.exe" nur zum Starten dient und sofort wieder ausgeht. Wenn ich den Code richtig interpretiere muss ich statt "tasklist find "skse_loader.exe" > nul" meinen Prozess von Skyrim eintragen, da der die ganze Zeit aktiv ist.

Hier mein gesamter Code:

start D:\Spiele\Valve\Steam\steamapps\common\Skyrim\ENBInjector.exe
sleep 100
start D:\Spiele\Valve\Steam\steamapps\common\Skyrim\skse_loader.exe
:loop
timeout /t 2 /nobreak
tasklist | find "TESV.exe" > nul
if errorlevel 1 taskkill /f /im "ENBInjector.exe"
tasklist | find "ENBInjector.exe" > nul
if errorlevel 1 goto end
goto loop

:end
exit

Edit 2: Hat funktioniert  danke für die Hilfe


----------



## Rho (2. Juli 2015)

*AW: Programm über Batch ausführen und schließen*



MZ259 schrieb:


> Die CPU sollte dabei eher weniger Probelme machen, da sie meistens weniger gefordert wird, als die Garfikkarte, aber auch das werde ich testen.



Du kannst ja mal den Timeout aus dem Script entfernen und beobachten, was dann passiert.


----------



## freezy94 (3. Juli 2015)

*AW: Programm über Batch ausführen und schließen*

Du könntest jetzt noch weiter gehen und Skyrim 2 feste Kerne zuweisen und dem CMD lediglich einen Kern.
Wenn das Script den Prozessor so belasten würde, ich hab es nicht getestet, würdest du es somit entlasten.


----------



## Rho (3. Juli 2015)

*AW: Programm über Batch ausführen und schließen*

So lange bei jedem Schleifendurchlauf eine kurze Pause eingelegt wird, ist das alles überhaupt kein Problem. Um nichts anderes ging es mir. Irgendwelche Kerne zuzuweisen ist völlig unnötig.


----------



## freezy94 (3. Juli 2015)

*AW: Programm über Batch ausführen und schließen*

Ich habe lediglich darauf hingewiesen. Das man aber gleich beleidigt sein muss?


----------



## Rho (3. Juli 2015)

*AW: Programm über Batch ausführen und schließen*

Ich weiß nicht, wie du darauf kommst, ich sei beleidigt. Ich wüsste auch beim besten Willen nicht, weshalb.

Dein Vorschlag war sinnbefreit. Darauf habe ich hingewiesen. Nicht mehr und nicht weniger. Ich bin schon gespannt, was du diesmal in meinen Beitrag hineininterpretierst. Und nein, ich bin noch immer nicht beleidigt.


----------



## MZ259 (3. Juli 2015)

*AW: Programm über Batch ausführen und schließen*

Ohne Timeout rafft es ziemlich an der CPU... geradezu erstaunlich. Zwei Kerne für Skyrim zuzuweisen wäre ein enormer Leistungsverlust, da ich auf allen vier Kernen eine AUslastugn von 70-90% bekomme (jeh nachdem, wo ich gerade bin) 
SMT bzw. CMT hat mein Prozessor (etwas älteres Baujahr) leider nicht, weshalb ich nur vier Threads (von vier physikalisch vorhandenen Kernen) zur Verfügung habe, im nächsten Jahr gibt's aber einen neuen


----------



## Muletto (3. Juli 2015)

*AW: Programm über Batch ausführen und schließen*

Jup, je nach CPU ist die Auslastung natürlich unterschiedlich. Solange das Skript ja funktioniert ist ja alles i.O. 
Den Parameter für das Intervall kann der Threadersteller sich wahlweise anpassen.


----------

