Datum und Uhrzeit von Logfiles auslesen
Ich bin an meinen ersten gehversuchen mit VBS oder Programieren überhaubt und stehe irgendwie auf den Schlauch.
Ich versuche eine einfache Liste zu erstellen. Datum, Uhrzeit, Pfad mit Dateiname. Bloss wie das Leben so spielt, hat eine der ausgelsenen Dateien die Uhrzeit 00:00:00. Was dazu führt, dass in dieser Zeile, die Uhrzeit fehlt. Ich hab mal etwas herrum gegoogelt, aber irgendwie, wird es recht schnell komplex. Ich wäre also Dankbar für eine einfach Antwort, die man ohne Studium versteht. Trozdem sollte natürlich soviel Information enthalten sein, dass ich den Fehler begreiffe und nicht nur weiss, wie ich ihn behebe.
Ich versuche eine einfache Liste zu erstellen. Datum, Uhrzeit, Pfad mit Dateiname. Bloss wie das Leben so spielt, hat eine der ausgelsenen Dateien die Uhrzeit 00:00:00. Was dazu führt, dass in dieser Zeile, die Uhrzeit fehlt. Ich hab mal etwas herrum gegoogelt, aber irgendwie, wird es recht schnell komplex. Ich wäre also Dankbar für eine einfach Antwort, die man ohne Studium versteht. Trozdem sollte natürlich soviel Information enthalten sein, dass ich den Fehler begreiffe und nicht nur weiss, wie ich ihn behebe.
dim liste
dim Pfad1
ordner ="Z:\log\"
set fs = createobject("Scripting.FileSystemObject")
Sub Listordner(ordner)
Set ordner = fs.getfolder(ordner)
For Each file In ordner.files
Pfad1 = file.path
set logbuch = fs.opentextfile("Z:\inhalt.txt", 8, true,0)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile(Pfad1)
li = ""
li = li & f1.DateLastModified & " " & f1.Path & vbcr
logbuch.writeline li
logbuch.close
Next
End Sub
Listordner ordner
msgbox "Fertig", 64 , "Fertig"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85338
Url: https://administrator.de/forum/datum-und-uhrzeit-von-logfiles-auslesen-85338.html
Ausgedruckt am: 27.04.2025 um 09:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo rabbit00!
In VBS werden Datum und Uhrzeit zusammen gespeichert: das Datum als Tageanzahl vor dem Komma und die Uhrzeit als Bruchteil eines Tages hinter dem Komma - 18:00 wäre zB 0.75. Wenn ein solcher "kombinierter" Wert vor oder hinter dem Komma 0 enthält, wird er nur als Uhrzeit oder nur als Datum interpretiert (wie es bei der einen Datei passiert).
Um auch "00:00:00" auszugeben, kannst Du die entsprechende Formatierungsfunktion verwenden, was in Deinem Script etwa so aussähe:
Zu Deinem Entwurf hätte ich noch einige Anmerkungen:
Unter Berücksichtigung dieser Aspekte würde das Script bei mir etwa so aussehen:
Grüße
bastla
In VBS werden Datum und Uhrzeit zusammen gespeichert: das Datum als Tageanzahl vor dem Komma und die Uhrzeit als Bruchteil eines Tages hinter dem Komma - 18:00 wäre zB 0.75. Wenn ein solcher "kombinierter" Wert vor oder hinter dem Komma 0 enthält, wird er nur als Uhrzeit oder nur als Datum interpretiert (wie es bei der einen Datei passiert).
Um auch "00:00:00" auszugeben, kannst Du die entsprechende Formatierungsfunktion verwenden, was in Deinem Script etwa so aussähe:
dt = f1.DateLastModified
Dat = FormatDateTime(dt, vbShortDate) & " " & FormatDateTime(dt, vbLongTime)
li = Dat & " " & f1.Path & vbcr
- Du "splittest" praktisch Dein Hauptprogramm - übersichtlicher wäre:
dim liste
dim Pfad1
ordner ="Z:\log\"
Listordner ordner
msgbox "Fertig", 64 , "Fertig"
- Das Deklarieren ("dim ...") von Variablen solltest Du konsequent oder gar nicht vornehmen. Wenn Du deklarierst, dann alle Variablen (also auch "ordner", "file", "logbuch" ...) und am besten kombiniert mit einer ersten Zeile "Option Explicit" - damit erreichst Du, dass Dich der Interpreter darauf hinweist, wenn eine nicht deklarierte Variable verwendet werden soll, was einen effektiven Schutz gegen Tippfehler in Variablennamen bringt (wenn Du etwa für die Variable "Pfad1" an anderer Stelle im Script nur "Pfad" schreibst, erhältst Du eine diesbezügliche Fehlermeldung).
- Es genügt, das "FileSystemObject" nur einmal zu erzeugen - verwenden kannst Du es dann sowohl für Ordner, als auch für Dateien.
- Der Variablennamen "ordner" steht für den Pfad im Hauptprogramm, als Argument im Unterprogramm und nochmals für das erzeugte "Folder"-Objekt - hier solltest Du besser differenzieren.
- Das zusätzliche File-Objekt "f1" ist unnötig - Du hast ja aus der Files-Auflistung ohnehin schon jede einzelne Datei in der Schleife als "file" zur Verfügung.
- Einerseits hast Du (sinnvoller Weise) die Festlegung des zu bearbeitenden Ordners durch eine Variablenzuweisung gleich am Anfang vorgenommen, andererseits den Namen der Ausgabedatei im Unterprogramm "hart codiert" - auch dafür würde sich eine Variable anbieten.
- Das Öffnen und Schließen der Ausgabedatei innerhalb der Schleife ist aus meiner Sicht unnötig - vor der Schleife, und dann einfach zum Schreiben, öffnen würde schon genügen, und so könntest Du zB auch automatisch bei jedem Durchlauf des Scripts die Ausgabedatei neu erstellen lassen (wobei alternativ ein "Append" natürlich auch hier möglich wäre).
- Das "Löschen" der Variable "li" passiert automatisch, wenn Du die Ausgabezeile so erzeugst:
li = f1.DateLastModified & " " & f1.Path & vbcr
- Es lässt sich sicher streiten, ob die zusätzliche Zeilenschaltung (mit "vbCr") besser in der Variablen oder erst beim Schreiben in die Datei untergebracht ist ...
- Anstelle des wenig aussagekräftigen Wertes "64" in der MsgBox bietet sich die Konstante "vbInformation" an. (Bei "OpenTextFile" schreibe ich allerdings "2", da ich eine Konstante "ForWriting" erst deklarieren müsste und es auch nur drei mögliche Werte gibt, die relativ rasch geläufig werden).
- Als weiterer Beitrag zur Übersichtlichkeit empfiehlt sich das Einrücken von Codeblöcken (wie zB innerhalb der "For"-Schleife). Im Forum werden für den verwendeten Tab leider anstelle von nur 4 Leerzeichen gleich 8 gesetzt, im Editor sieht's besser aus ...
Unter Berücksichtigung dieser Aspekte würde das Script bei mir etwa so aussehen:
Ordner = "Z:\log\"
LogDatei = "Z:\inhalt.txt"
Listordner Ordner, LogDatei
MsgBox "Fertig", vbInformation, "Fertig"
Sub Listordner(OrdnerPfad, DateiPfad)
Set fso = CreateObject("Scripting.FileSystemObject")
Set Folder = fso.GetFolder(OrdnerPfad)
Set Logbuch = fso.OpenTextFile(DateiPfad, 2, True)
For Each File In Folder.Files
dt = File.DateLastModified
Dat = FormatDateTime(dt, vbShortDate) & " " & FormatDateTime(dt, vbLongTime)
Line = Dat & vbTab & File.Path
Logbuch.WriteLine Line & vbCrLF
Next
Logbuch.Close
End Sub
Grüße
bastla