ava2k3 Geschrieben 9. Juli 2007 Teilen Geschrieben 9. Juli 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 9. Juli 2007 Teilen Geschrieben 9. Juli 2007 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ava2k3 Geschrieben 10. Juli 2007 Autor Teilen Geschrieben 10. Juli 2007 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ß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ava2k3 Geschrieben 10. Juli 2007 Autor Teilen Geschrieben 10. Juli 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ingh Geschrieben 10. Juli 2007 Teilen Geschrieben 10. Juli 2007 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 10. Juli 2007 Teilen Geschrieben 10. Juli 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ava2k3 Geschrieben 11. Juli 2007 Autor Teilen Geschrieben 11. Juli 2007 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 11. Juli 2007 Teilen Geschrieben 11. Juli 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thanks-and-Goodbye Geschrieben 11. Juli 2007 Teilen Geschrieben 11. Juli 2007 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thombo Geschrieben 11. Juli 2007 Teilen Geschrieben 11. Juli 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Thanks-and-Goodbye Geschrieben 11. Juli 2007 Teilen Geschrieben 11. Juli 2007 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ava2k3 Geschrieben 12. Juli 2007 Autor Teilen Geschrieben 12. Juli 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.