Do Until - Systemzeit funktioniert nicht

  • Das $Hour +=1 hat am Anfang immer die Zeit Automatisch hochgezählt, ehe es in die Batch Schleife gesprungen ist.

    Das hat auch einen Grund!

    Wenn ich um 12:17 das script starte würde er sonst bis 12:16 (also 23 Stunden und 59 Minuten) warten bevor es starten würde, daher +1, damit es das erste mal in der folgenden Stunde um 13:16 gestartet wird.

    Zum testen sollte man es natürlich auskommentieren...

    Man sollte also erst mal das ganze verstehen bevor man "einfach mal" etwas auskommentiert und sagt "hey das ist die Lösung"...

    Einmal editiert, zuletzt von Moombas (30. September 2021 um 14:09)

  • Man kann es natürlich noch verfeinern, hab das mal getan in #8

    Aber das spart im worst case nur 16 Minuten bis zur ersten Ausführung, das fand ich nun nicht so dramatisch.

  • Also ein kleines Update:

    Also die "Lösung" von gmmg habe ich ausprobiert. und er hat auch zur angegebenen Zeit gestartet.

    Nach dem ausführen der Batch Datei, hat diese nicht gemacht was sie machen soll.

    Ich habe die Batch dann händisch ausgeführt um zu prüfen ob diese evtl. fehlerhaft ist. Fehlanzeige - per Hand funktioniert sie.

    Könnte es von jetzt an tatsächlich kein Autoit Problem sondern viel mehr ein Server Problem sein mit der aus dem script erstellten .exe?

    Weil diese jetzt dauerhaft läuft und daher Software seitig eher als Dienst läuft und nicht mehr als normales Programm?

  • Zunächst einmal, die Lösung stammt von mir, gmmg hat nur eine Zeile auskommentiert, was auch noch falsch war. (S.o.)

    Nehme das normalerweise nicht so genau aber richtig stellen will ich das schon!

    Das die Batch nicht macht was sie soll ist eine fadenscheinige Aussage mit der hier keiner was anfangen kann.

    Da musst du schon genauer werden, was sie machen soll und was sie nicht macht.

    Ich vermute mal in den blauen Dunst, wie so oft, Berechtigungsprobleme. Aber halt nur aus der :Glaskugel:

  • Du, ja aber das ausgeführte Programm, wenn durch die Exe aufgerufen wird, nicht unbedingt.

    Aber wie gesagt wenn du keine Informationen gibst, kann man auch nicht helfen.

    Ich schmeiße trotzdem mal was in den Raum für dich zur Selbstrecherche:

    #RequireAdmin

    Runas()

    P.s.: Berechtigungen sind auch "Datei ist im Zugriff",... , das hat nicht immer was mit Benutzerrechten zu tun. Aber du bist ja Administrator und kannst auch sicherlich trotz laufendem Windows das Windowsverzeichnis löschen...

    Einmal editiert, zuletzt von Moombas (30. September 2021 um 15:54)

  • ich möchte gerne jede Stunde eine .bat ausführen, bzw. Jede Volle Stunde plus 16 Sekunden. (01:16, 02:16 usw.)

  • Bitnugger Leider muss ich dich korrigieren, seine Ursprungsaussage war falsch. Er will nicht 16 Sekunden, sondern 16 Minuten nach der vollen Stunde die Bat ausführen. Und ich verstehe nicht ganz warum du auf "And $iCurrentMin = 12" schaust aber scheinbar bekomme ich gerade dazu den Bezug nicht.

    $sCMD würde ich wenn schon sofort definiert, als Global Const setzen.

    Ich halte das mit dem fixen sleep für 1h für gefärlich aber ggf. bin ich da etwas gebrandmarkt von anderen Projekten, wo so etwas nicht hin haute (1h theoretischer sleep <> 1h Realität)? (Einfluss von PC-Auslastung etc.)

    War zumindest mein Grund das nicht zu nutzen.

    Desweiteren hat er ja ein "Ausführungsproblem" mit seiner Batch, das sie nicht macht was er will wenn sie über autoit gestartet wird. Das wurde hierbei nun auch nicht beachtet.

    diebratwurst Das script von bitnugger macht vom Prinzip nichts anderes als meins, wird also an deinem Problem nichts ändern.

    Des weiteren ist die ideale Verfahrensweise weiterhin die Aufgabenplanung.

    Einmal editiert, zuletzt von Moombas (1. Oktober 2021 um 08:40)

  • Moin zusammen.

    Wenn ich es richtig verstehe, gibt es Problem bei sich regelmäßigen widerholenden Abläufen.
    Wieso da nicht einen CronTab verwenden.

    Kleine lustige Randbemerkung:
    Wenn ich morgens den PC an mache im Büro, dann führe ich einen CronTab durch der mehr als 100 Aufgaben abarbeitet. Die erste ist immer (!) das externe DVD-LW einmal zu öffnen und zu schließen. Das LW wurde nicht mehr benötigt und bekam eine neue Aufgabe. Ich habe einfach ein alten Bleistift daran festgeklebt und wenn das LW auf geht, drückt der Bleistift einen Knopf, der dann eine Steckdosenzeile an schlatet und was ist da wohl dran? Richtig, die Kaffeemaschiene.

    Quellcode ist nicht von mir. Habe ich selber zu meiner Anfangszeit mal zugesendet bekommen.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Er will nicht 16 Sekunden, sondern 16 Minuten nach der vollen Stunde die Bat ausführen.

    Habe ich mir schon gedacht...

    Und ich verstehe nicht ganz warum du auf "And $iCurrentMin = 12" schaust aber scheinbar bekomme ich gerade dazu den Bezug nicht.

    Beim Testen hatte ich die auf 12 gesetzt und dann vergessen, sie wieder auf 0 zu setzen.

    $sCMD würde ich wenn schon sofort definiert, als Global Const setzen.

    Ja, kann man machen, muss man aber nicht... Pi ist eine Konstante und die würde ich definitiv auch als Const deklarieren.

    Ich halte das mit dem fixen sleep für 1h für gefärlich aber ggf. bin ich da etwas gebrandmarkt von anderen Projekten, wo so etwas nicht hin haute (1h theoretischer sleep <> 1h Realität)? (Einfluss von PC-Auslastung etc.)

    Jeep, du bist gebrantmarkt... 8o ...man kann dafür ohne Probleme eine fixen Wert nehmen, wenn dieser nicht zu groß gewählt wird, damit es auch bei starker PC-Auslastung noch sicher funktioniert. Jede Std. soll der Hund beißen... dann setze ich den fixen Wert halt auf 59 min. - und die restliche Zeit dann mit Sleep(100) oder so in einer zweiten Schleife warten. Bei mir hat das bis dato immer funktioniert.

    Desweiteren hat er ja ein "Ausführungsproblem" mit seiner Batch, das sie nicht macht was er will wenn sie über autoit gestartet wird. Das wurde hierbei nun auch nicht beachtet.

    Doch...

    If Not FileExists($sCMD) Then Exit 1

    ...gestartet wird das Batch ergo... funktioniert aber nicht wie erwartet... evtl. weil ein & Operator, Umleitungszeichen (<>), eine Pipe (|) oder ein CMD-interner Befehl (echo) verwendet wird, und es nicht in einer CMD gestartet wurde.


    Bsp.:

    mkdir m:\123 && pushd m:\123

    dir|find "S"

    dir >m:\dir.txt

    echo Das funktioniert nicht!

    Entweder den Befehl ändern...

    AutoIt
    $sCMD = @ComSpec & " /c " & "D:\AWK\Schnittstelle\Auftraege\PTV_Import.bat"
    AutoIt
    #include <Process.au3>
    $sCMD = "D:\AWK\Schnittstelle\Auftraege\PTV_Import.bat"
    _RunDos($sCMD)

    ... oder das Script mit der Option "Create CUI instead of GUI EXE." kompilieren und dann die Exe ausführen... bin mir aber nicht sicher, ob das funktioniert.

    Könnt ihr mir sagen warum mein Script nicht funktioniert und die Datei nicht ausführt?

    Kann ShellExecute die Datei nicht finden, wird eine Messagebox angezeigt und das Script beendet... ist dies nicht der Fall, wurde die Datei ausgeführt, aber vorzeitig mit einem Fehler beendet.