Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

batchscript nach x minuten automatisch beenden?

Empfohlene Antworten

Veröffentlicht

Hi,

habe eine Frage.

ich habe hier ein Batchscript, welches einen Befehl ausführt. Bis dieser abgearbeit ist dauert es meistens so um die 5 Minuten. Es kann aber vorkommen, dass es zu einem Fehler kommt. Dann hört das teil nicht mehr auf zu laufen.

Mich würde interessieren, ob man in das script einbauen könnte, dass er nach x Minuten stoppt und dann ein anderes script ausführt?

Gruß und danke

ich denke nicht dass es wie von dir gewünscht funktioniert,

es gibt aber einen anderen Weg:

Batchdatei startet Programm

Batchdatei wartet 5 Minuten

Batchdatei schaut nach ob das Programm noch läuft und führt ggfs. Aktionen durch

Benötigte Tools:

sleep.exe - MS Windows Resource Kit

pslist.exe und pskill.exe - aus den PSTOOLS von MS

Z.Bsp. so:

@echo off
start Programm.exe
sleep.exe 300
pslist.exe -e "Programm"
IF %ERRORLEVEL%==0 (
pskill.exe -t "Programm"
) ELSE (
echo Programm hat sich selbstständig beendet
)[/PHP]

  • Autor

das ist eigentlich sogar noch viel besser.

Problem ist nur, dass das erste "Programm" was startet eine batch datei ist.

Wenn ich die also killen will, müsste ich cmd killen. cmd ist aber auch das batchscript, was checkt ob das ding noch läuft und es dann gegebenfalls killst.

wie kann ich da unterscheiden?!

Gruß

  • Autor

meine letzte Frage hat sich eigentlich erledigt. Dafür hab ich eine Lösung gefunden.

Nun würde ich gerne noch folgendes realisieren.



@echo off


start D:\test\fetch.bat


sleep.exe 10


c:\pstools\pslist.exe -e cmd


IF %ERRORLEVEL%==0 (

    c:\pstools\pskill.exe -t cmd


) ELSE (


    D:\test\prod.bat

)  

wenn er das pskill ausgeführt hat (falls nötig) soll direkt danach ein anderes Script gestartet werden. alá

IF %ERRORLEVEL%==0 (

    c:\pstools\pskill.exe -t cmd;d:\test\prod.bat

) ELSE (


    D:\test\prod.bat

)  

starte script1,kille dieses nach x sekunden und führe direkt danach script2 aus. Wenn script1 schon beendet war, führe auch script2 aus.

Bekommt man das noch irgendwie hin?

hiermit: c:\pstools\pskill.exe -t cmd;d:\test\prod.bat

gehts jedenfalls nicht :)

Wie wäre es, den Befehl, der immer ausgeführt werden soll, aus der ELSE-Klammer herauszunehmen? (Den ELSE-Teil kannst du auch ganz weglassen)

Wenn du abhängig von einer Bedingung mehrere Befehle abarbeiten willst, wirst du um Sprungmarken und GOTO nicht herumkommen.

Das könnte dann z.B. so aussehen:



IF ........ (

  GOTO ok

) ELSE (

  GOTO nok    

)


:ok

d:\test\skript123.bat

d:\test\skript234.bat

GOTO weiter


:nok

D:\test\skript987.bat

GOTO weiter


:weiter

d:\test\skriptimmer.bat

Das zweite "goto weiter" ist eigentlich unnötig ( :weiter steht eh in der nächsten Batchzeile), ich habe es mir aber angewöhnt, damit auch bei evtl. späteren Erweiterungen oder Umbauten in der Batchdatei immer ein definierter Punkt vorhanden ist, an dem es weitergehen soll.

IF %ERRORLEVEL%==0 (

c:\pstools\pskill.exe -t cmd && d:\test\prod.bat

) ELSE (

D:\test\prod.bat

)

Erklärung

Befehl1 && Befehl2

-> Befehl2 wird ausgeführt wenn Befehl1 erfolgreich abgearbeitet wurde

Befehl1 || Befehl2

-> Befehl2 wird ausgeführt wenn Befehl1 NICHT erfolgreich abgearbeitet wurde

  • Autor
IF %ERRORLEVEL%==0 (

c:\pstools\pskill.exe -t cmd && d:\test\prod.bat

) ELSE (

D:\test\prod.bat

)

Erklärung

Befehl1 && Befehl2

-> Befehl2 wird ausgeführt wenn Befehl1 erfolgreich abgearbeitet wurde

Befehl1 || Befehl2

-> Befehl2 wird ausgeführt wenn Befehl1 NICHT erfolgreich abgearbeitet wurde

danke, dass hatte ich mittlerweile auch rausbekommen :-) klappt auch gut.

Nun ist doch wieder das erste Problem aktuell.

das batchscript startet ja ein weiteres batchscript. Problem dabei ist natürlich, dass beide im pslist als "cmd" auftauchen. Mach ich nun einen kill auf "cmd" beende ich nicht nur das script, was beendet werden soll, sondern natürlich auch das script, was alles regelt (den kill und das starten usw.).

Nach dem kill ist also Ende.

Ich weiss nicht, wie ich da eine Unterscheidung machen soll, dass nur das neu gestartete batchscript beendet wird.

Vielleicht könnte man die ganze kill und starten geschichte ja auch in VBS realisieren?! Dann wäre nur ein "cmd" offen, welches ich dann auch problemlos killen kann.

Eine Idee?

Dann gehts hiermit:


@echo off
start AndereBatch.cmd
sleep.exe 300
pslist.exe -e cmd
IF %ERRORLEVEL%==0 (
taskkill /FI "WINDOWTITLE eq Fenstertitel"
) ELSE (
echo Programm hat sich selbstständig beendet
)
[/PHP]

Und in deiner "AndereBatch.cmd" schreibst du in die erste Zeile

[PHP]
title Fenstertitel

Fangfrage: Warum schiesst ihr mit pskills schrotflintenlike auf die hängende Batch, statt gezielt mit einem Schuss auf das aus der Batch aufgerufene Programm zu schiessen? Ist das hängende Programm beendet, schliesst sich die Batch und ihr killt keine cmd mit Kollateralschaden.

Fangfrage: Warum schiesst ihr mit pskills schrotflintenlike auf die hängende Batch, statt gezielt mit einem Schuss auf das aus der Batch aufgerufene Programm zu schiessen? Ist das hängende Programm beendet, schliesst sich die Batch und ihr killt keine cmd mit Kollateralschaden.

Weil ich es einfach "Schrotflintenlike" liebe :D

Wobei deine Methode natürlich auch ne Methode is :)

Hat vor allem den Vorteil (wenn denn von dem hängenden Programm keine Übergaben erwartet werden), dass die weiteren Schritte, die in der Batch abgearbeitet werden sollen, auch noch abgearbeitet werden. ;)

  • Autor
Dann gehts hiermit:


@echo off
start AndereBatch.cmd
sleep.exe 300
pslist.exe -e cmd
IF %ERRORLEVEL%==0 (
taskkill /FI "WINDOWTITLE eq Fenstertitel"
) ELSE (
echo Programm hat sich selbstständig beendet
)
[/PHP]

Und in deiner "AndereBatch.cmd" schreibst du in die erste Zeile

[PHP]
title Fenstertitel

danke, so klappts wunderbar

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.