Vernünftig eine einzige Logdatei pro Tag mit mehreren Restart des Programms oder Alternativlösung um Programmneustart zu vermeiden
Hallo,
ich verzweifel langsam bei dieser (zu erst dachte ich simplen) Aufgabe:
Ich habe ein Programm, dass bei bestimmten Punkten wieder von Vorne anfangen soll, ala "goto :Begin" und in dieselbe Log schreiben soll pro Tag.
Es ist sehr lange und ich habe bemerkt, dass mit einem "goto :Begin" das Programm mit jedem neuen "goto :Begin" immer langsamer wird. (Warum? Ich vermute, das hat etwas mit den dann gelöschten Variablen zutun? Vielleicht gibt es auch einen einfachen Befehl, der ähnliches bewirken kann?)
Jedenfalls, kam mir deshalb die Idee das komplette Programm immer neuzustarten, wenn es an den Anfang soll, damit die Performance viel besser wird.
An sich funktioniert das super, aber das mit der Logdatei geht nicht ganz...
Ich habe folgenden Code geschrieben:
Das Problem hierbei ist, dass das Programm mehrere hundert Mal pro Tag neustartet und ich deshalb entsprechend viele Logfiles habe.
Dann hatte ich probiert mein ProgramLogged so umzuschreiben, dass es in dieselbe Log schreibt:
Hier bekomme ich aber ständig den Fehler, dass auf die Datei zugegriffen wird und deshalb nicht hineingeschrieben werden kann.
Wie kann ich diese "simple" Aufgabe am besten lösen?
Wie gesagt, wenn es eine alternative Lösung gibt, die ein Programmneustart vermeiden kann und damit dieselbe Performance erzielt, wie wenn das Programm neustartet höre ich davon gerne.
LG
Peter
ich verzweifel langsam bei dieser (zu erst dachte ich simplen) Aufgabe:
Ich habe ein Programm, dass bei bestimmten Punkten wieder von Vorne anfangen soll, ala "goto :Begin" und in dieselbe Log schreiben soll pro Tag.
Es ist sehr lange und ich habe bemerkt, dass mit einem "goto :Begin" das Programm mit jedem neuen "goto :Begin" immer langsamer wird. (Warum? Ich vermute, das hat etwas mit den dann gelöschten Variablen zutun? Vielleicht gibt es auch einen einfachen Befehl, der ähnliches bewirken kann?)
Jedenfalls, kam mir deshalb die Idee das komplette Programm immer neuzustarten, wenn es an den Anfang soll, damit die Performance viel besser wird.
An sich funktioniert das super, aber das mit der Logdatei geht nicht ganz...
Ich habe folgenden Code geschrieben:
ProgramLogged.bat:
@echo off & setlocal
set FileDateTime=App%date%_%time:~0,2%h%time:~3,2%m%time:~6,2%s
cd "C:\Progamm" > NUL
program.bat > logs\%FileDateTime%.txt 2>&1
Program.bat:
@echo off & setlocal
:Begin
:: hier steht ganz viel code mit goto :end statt goto :begin
:end
start ProgramLogged.bat
exit
::pause
Das Problem hierbei ist, dass das Programm mehrere hundert Mal pro Tag neustartet und ich deshalb entsprechend viele Logfiles habe.
Dann hatte ich probiert mein ProgramLogged so umzuschreiben, dass es in dieselbe Log schreibt:
ProgramLogged.bat:
@echo off & setlocal
set FileDate=App%date%
cd "C:\Progamm" > NUL
program.bat **>**> logs\%FileDateTime%.txt 2>&1
Hier bekomme ich aber ständig den Fehler, dass auf die Datei zugegriffen wird und deshalb nicht hineingeschrieben werden kann.
Wie kann ich diese "simple" Aufgabe am besten lösen?
Wie gesagt, wenn es eine alternative Lösung gibt, die ein Programmneustart vermeiden kann und damit dieselbe Performance erzielt, wie wenn das Programm neustartet höre ich davon gerne.
LG
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 314744
Url: https://administrator.de/forum/vernuenftig-eine-einzige-logdatei-pro-tag-mit-mehreren-restart-des-programms-oder-alternativloesung-um-314744.html
Ausgedruckt am: 18.04.2025 um 08:04 Uhr
5 Kommentare
Neuester Kommentar
Moin Peter,
die Fehler werden vermutlich auf einem anderen Ausgabekanal herausgeschrieben, d.h. nicht auf STDOUT (Kanal 1, Konsole, Bildschirm), sondern auf STDERR (Kanal 2).
Bedeutet,
Aber zum 7ten Mal: du hast immer noch das Problem, dass alles viel länger dauert/viel mehr Ressourcen braucht als erklärlich.
Willst diuda nicht mal langsam versuchen, dieses Phänomen einzugrenzen wie mehrfach vorgeschlagen?
Grüße
Biber
die Fehler werden vermutlich auf einem anderen Ausgabekanal herausgeschrieben, d.h. nicht auf STDOUT (Kanal 1, Konsole, Bildschirm), sondern auf STDERR (Kanal 2).
Bedeutet,
- wenn du jetzt ein ">NUL" an einer Zeile stehen hast, ist das die Kurzschreibweise von "1>NUL"=="Schreibe alle STDOUT-Meldungen ins Nirvana".
- du kannst alle Fehlermeldungen des Batches/einzelner Zeilen =STDERR-Meldungen in eine Datei umleiten, indem du alternativ schreibst "1>NUL 2>>"D:\Ein\Pfad\DeinFehlerprotokoll" oder "1>>"D:\eine\Ergebnisse.txt" 2>>"D:\Ein\Pfad\DeinFehlerprotokoll".
Aber zum 7ten Mal: du hast immer noch das Problem, dass alles viel länger dauert/viel mehr Ressourcen braucht als erklärlich.
Willst diuda nicht mal langsam versuchen, dieses Phänomen einzugrenzen wie mehrfach vorgeschlagen?
Grüße
Biber