Zum Inhalt springen

batchscript nach x minuten automatisch beenden?


ava2k3

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...