Suche VBScript zum auslesen einer .csv datei nach dem auslesen sollen 1 monat alte einträge geslöscht werden
Hall ich suche ein VbScript das mir die arbeit erleichtert. Das script soll in einer .csv datei die das an und abmelden eines useres erfasst spricht die Uhrzeit und das datum. Jetzt zu der genauen aufgabe das script soll einträge die älter als 1 monat löschen damit die .csv datei nich zu groß wird und ewig zum öffnen brauch. Ich würde mich über einen link/fertiges script freuen da ich einfach nicht weiter komme.
Danke im Vorraus Daniel (sry für die grottige rechtschreibung :D)
Danke im Vorraus Daniel (sry für die grottige rechtschreibung :D)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 214959
Url: https://administrator.de/forum/suche-vbscript-zum-auslesen-einer-csv-datei-nach-dem-auslesen-sollen-1-monat-alte-eintraege-gesloescht-werden-214959.html
Ausgedruckt am: 24.12.2024 um 00:12 Uhr
13 Kommentare
Neuester Kommentar
Hallo Daniel,
das könntest du mit folgendem Script erreichen:
(Pfad zur CSV-Datei noch in der ersten Zeile ändern)
die resultierende CSV-Datei sähe dann nach folgendem Muster aus:
Einträge älter als 30 Tage werden herausgelöscht und neue Einträge angehängt.
Grüße Uwe
das könntest du mit folgendem Script erreichen:
(Pfad zur CSV-Datei noch in der ersten Zeile ändern)
CSV = "F:\login.csv"
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set objShell = WScript.CreateObject("Wscript.Shell")
USERNAME = objShell.ExpandEnvironmentStrings("%username%")
If Not fso.FileExists(CSV) Then
'CSV-Datei erstellen wenn sie noch nicht existiert
Set objNewFile = fso.CreateTextFile(CSV,False)
Else
'Einträge älter as 30 Tage nicht übernehmen
strContent = Split(fso.OpenTextFile(CSV,1).ReadAll,vbNewLine)
Set objNewFile = fso.OpenTextFile(CSV,2)
For i = 0 To UBound(strContent)
If strContent(i) <> "" Then
lineDatum = Split(strContent(i),";")(0)
If DateValue(lineDatum) > DateAdd("d",-30,Now()) Then
objNewFile.WriteLine strContent(i)
End If
End If
Next
End If
'Aktuellen Login eintragen
objNewFile.WriteLine Now() & ";" & USERNAME
objNewFile.Close
die resultierende CSV-Datei sähe dann nach folgendem Muster aus:
22.08.2013 11:46:48;hmustermann
22.08.2013 11:46:59;gmusterfrau
Grüße Uwe
poste hier einfach einen Ausschnitt, und benutze Code-Tags dafür.
Zitat von @nochamlernen:
Sry wenn das jetzt dumm kling naja ist es auch aber da steig ich nich durch ich meinte
Abgemeldet:
User: Datum: Zeit:
constantin 21.08.2013 15:31:35,23
so sah das vor deinem script aus
Abgemeldet: constantin 22.08.2013 01:05,1
jetzt so jeder wert in einer tabelen spalte und ich habe schon programme die das hoch und runter fahren so wie das an und abmelden
in diese csv datei schreiben.
Sorry aber dein Deutsch ist zu schlecht um dich vernünftig zu verstehen.Sry wenn das jetzt dumm kling naja ist es auch aber da steig ich nich durch ich meinte
Abgemeldet:
User: Datum: Zeit:
constantin 21.08.2013 15:31:35,23
so sah das vor deinem script aus
Abgemeldet: constantin 22.08.2013 01:05,1
jetzt so jeder wert in einer tabelen spalte und ich habe schon programme die das hoch und runter fahren so wie das an und abmelden
in diese csv datei schreiben.
Hier mein Vorschlag, deine CSV-Datei zu strukturieren:
Angemeldet;username;22.08.2013 18:00.00
Abgemeldet;username;22.08.2013 17:00.00
Angemeldet;username;22.08.2013 18:00.00
Abgemeldet;username;22.08.2013 17:00.00
Dazu startet man das script mit folgenden Kommandozeilen, je nach nachdem ob es ein Anmelden oder ein Abmelden-Event sein soll
Im Anmelde-Script:
cscript.exe //NOLOGO dasscript.vbs logon
Im Abmelde-Script
cscript.exe //NOLOGO dasscript.vbs logoff
CSV = "F:\login.csv"
'Scriptargumente überprüfen
Set objArgs = WScript.Arguments
If objArgs.Count = 1 Then
Select Case objArgs(0)
Case "logon"
LOGON_TYPE = "Angemeldet"
Case "logoff"
LOGON_TYPE = "Abgemeldet"
End Select
Else
WScript.Quit 1
End If
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set objShell = WScript.CreateObject("Wscript.Shell")
USERNAME = objShell.ExpandEnvironmentStrings("%username%")
If Not fso.FileExists(CSV) Then
'CSV-Datei erstellen wenn sie noch nicht existiert
Set objNewFile = fso.CreateTextFile(CSV,False,True)
Else
Set objCSVFile = fso.OpenTextFile(CSV,1)
If Not objCSVFile.AtEndOfStream Then 'wenn die datei nicht leer ist
strContent = Split(objCSVFile.ReadAll,vbNewLine)
objCSVFile.Close
Set objNewFile = fso.OpenTextFile(CSV,2)
'Einträge älter as 30 Tage nicht übernehmen
For i = 0 To UBound(strContent)
If strContent(i) <> "" Then
lineDatum = Split(strContent(i),";")(2)
If DateValue(lineDatum) > DateAdd("d",-30,Now()) Then
objNewFile.WriteLine strContent(i)
End If
End If
Next
Else 'wenn die Datei leer sein sollte
Set objNewFile = fso.OpenTextFile(CSV,2)
End If
End If
'Aktuellen Login eintragen
objNewFile.WriteLine LOGON_TYPE & ";" & USERNAME & ";" & Now()
objNewFile.Close
Zitat von @nochamlernen:
Also dieses mit dem an und abmelden soll automatisch geschehen wenn der benutzer sich einloggt bei windows mit dem abschnitt bin
ich ja schon fertig mir geht es eigentlich nur noch dadrum das eine datei die man startet meine csv datei list und die
einträge löscht die älter als 1 monat sind damit die deitei nicht denn speicher blockiert oder ewig zum laden
braucht. Es tut mir echt leid das wir uns grade so miss verstehen Ich bin einfach nur zu blöd.
Also dieses mit dem an und abmelden soll automatisch geschehen wenn der benutzer sich einloggt bei windows mit dem abschnitt bin
ich ja schon fertig mir geht es eigentlich nur noch dadrum das eine datei die man startet meine csv datei list und die
einträge löscht die älter als 1 monat sind damit die deitei nicht denn speicher blockiert oder ewig zum laden
braucht. Es tut mir echt leid das wir uns grade so miss verstehen Ich bin einfach nur zu blöd.
aber lesen kannst du hoffentlich, ich hatte oben geschrieben das das Script das Löschen der älteren Einträge bereits beinhaltet. Im Code steht dies ebenfalls. Da du diesen anscheinend nicht ließt sondern einfach nur Copy n' Paste betreibst, klinke ich mich abschließend mit folgendem Script gepflegt aus.
für deine gewünschte Ausgabe
Abgemeldet: constantin 22.08.2013 01:05:00
CSV = "F:\login.csv"
'Scriptargumente überprüfen
Set objArgs = WScript.Arguments
If objArgs.Count = 1 Then
Select Case objArgs(0)
Case "logon"
LOGON_TYPE = "Angemeldet:"
Case "logoff"
LOGON_TYPE = "Abgemeldet:"
End Select
Else
WScript.Quit 1
End If
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set objShell = WScript.CreateObject("Wscript.Shell")
USERNAME = objShell.ExpandEnvironmentStrings("%username%")
If Not fso.FileExists(CSV) Then
'CSV-Datei erstellen wenn sie noch nicht existiert
Set objNewFile = fso.CreateTextFile(CSV,False,True)
Else
Set objCSVFile = fso.OpenTextFile(CSV,1)
If Not objCSVFile.AtEndOfStream Then 'wenn die datei nicht leer ist
strContent = Split(objCSVFile.ReadAll,vbNewLine)
objCSVFile.Close
Set objNewFile = fso.OpenTextFile(CSV,2)
'Einträge älter als 30 Tage nicht übernehmen
For i = 0 To UBound(strContent)
If strContent(i) <> "" Then
lineDatum = Split(strContent(i)," ")(2)
If DateValue(lineDatum) > DateAdd("d",-30,Now()) Then
objNewFile.WriteLine strContent(i)
End If
End If
Next
Else 'wenn die Datei leer sein sollte
Set objNewFile = fso.OpenTextFile(CSV,2)
End If
End If
'Aktuellen Login eintragen
objNewFile.WriteLine LOGON_TYPE & " " & USERNAME & " " & Now()
objNewFile.Close
Viel Erfolg
Grüße Uwe