Veröffentlicht 9. Juli 200718 j 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
9. Juli 200718 j 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]
10. Juli 200718 j 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ß
10. Juli 200718 j 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
10. Juli 200718 j 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.
10. Juli 200718 j 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
11. Juli 200718 j 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?
11. Juli 200718 j 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
11. Juli 200718 j 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.
11. Juli 200718 j 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 Wobei deine Methode natürlich auch ne Methode is
11. Juli 200718 j 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.
12. Juli 200718 j 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.