Ordner die älter als 2013 sind auflisten

Antonio889977

Grünschnabel
Hallo zusammen,

Ich wollte eigentlich ein VB Script schreiben das mir alle Ordner auflistet die zum Beispiel älter als 2013 sind. Nun ist es so das das Datum gar nicht berücksichtigt wird, sondern es werden alle Ordner aufgelistet die auch jünger als 2013 sind. Hier mein Script:

Pfad = InputBox("Bitte geben den Pfad ein")
dim liste, listeold



set fs = createobject("Scripting.FileSystemObject")

Sub Listordner(ordner)

Set ordner = fs.getfolder(ordner)
For Each file In ordner.files
liste = liste & file.path & vbCr
if DateDiff("d", file.DateLastModified, Now) < 2013 then listeold = listeold
Next
For Each unterordner In ordner.subfolders
liste = liste & unterordner.path & vbCr
next

set logbuch = fs.opentextfile("C:\Test.txt", 8, true,0)
logbuch.writeline liste & vBCr
logbuch.close
set logbuch = fs.opentextfile("C:\Test.txt", 8, true,0)
logbuch.writeline listeold & vBCr
logbuch.close

End Sub

ordner =pfad
Listordner ordner
anz_dateien = ordner.Files.Count
msgbox "Anzahl:" & CHR(13) & CHR(13) & anz_dateien
msgbox "Dateien im Ordner:" & CHR(13) & CHR(13) & liste
msgbox "Listold:" & CHR(13) & CHR(13) & listold

Was mach ich falsch? Jemand eine Idee?

Danke
 

Yaslaw

alter Rempler
Moderator
item: Die folgende Zeile macht doppelt keinen Sinn
Visual Basic:
if DateDiff("d", file.DateLastModified, Now) < 2013 then listeold = listeold
Zuerst den If-Teil: Du nimmst die Differenz vom Filedate und heute in Tagen. Wenn die Anzahl Tage Kleiner als 2013 (Ein Jahr) ist, dann mach etwas.
Du vergleichst also Tage mit einem Jahrgang. Total Sinnlos. Mit dieser Rechnung wird alles selektioniert was jünger als etwa 5,5 Jahre ist. Du willst aber Älter

Dann der Then-Teil: Du setzt listeodl = listeold. Was immer listeold auch ist. Es ist vor dem If bereits listold. Greift der If, dann ist wieder der Inhalt von vorher wieder übernommen. Wenn nicht, dann bleibt listeold gleich. Auf gut deutsch, der bereits falsche If bewirkt gar nix. listold ist vor dem If und nach dem If IMMER gleichbleibend

item: listold wird ausserhab der Sub deklariert. Mach das nicht. Abreite nicht mit globalen Variablen.

item: Logfile Dein Vorgang: Öffnen, Zeile schreiben, schliessen, sofort wieder öffnen, noch eine Zeile schtreiben und wieder schliessen. Das kann man in einem machen.

item: In dienem Code beginnt irgendwo ein Sub und endet irgendwo. Mitten in einem anderen Code. Unschön. Platziere die Sub besser

So auf die Schnelle und ungetestet
Visual Basic:
'/**
' * @param  String          IN      Ordnerpfad
' * @param  Long            IN      Das Jahr
' * @param  Array<String>   Out     Die gefundenen Dateipfade & Unterordberpfade
' * @param  Array<String>   Out     Die Pfade der alten Dateien (Älter als das angegeben Jahr)
' * @return Long                    Anzahl Dateien
' */'
Function listordner(ByVal ordner As String, ByVal jahr As Long, ByRef oListe() As String, ByRef oOldLste() As String) As Long
    Dim fs As Object
    Dim ordner As Object
    Dim file As Object
    Dim unterordner As Object
    Dim logbuch As Object
    Dim fileNr As Long
    Dim oldFileNr As Long

    Set fs = createobject("Scripting.FileSystemObject")

    Set ordner = fs.getfolder(ordner)
    redim oListe(ordner.files.count + ordner.subfolders.count -1)
    For Each file In ordner.files
        oListe(fileNr) = file.path
        if Year(file.DateLastModified) < jahr then
            redim preserve oOldLste(oldFileNr)
            oOldLste(oldFileNr) = file.path
            oldFileNr = oldFileNr + 1
        End IF
        fileNr = fileNr+1
    Next
    For Each unterordner In ordner.subfolders
        oListe(fileNr) = unterordner.path
        fileNr = fileNr+1
    next

    set logbuch = fs.opentextfile("C:\Test.txt", 8, true,0)
    logbuch.writeline join(oListe, vbCr)
    logbuch.writeline ""
    logbuch.writeline join(oOldLste, vbCr)
    logbuch.close

    listordner = ordner.files.count
End Function


Dim pfad As String
Dim jahr As Long
Dim anzahlDateien As Long
Dim liste() As String       'Wird durch listordner() abgefüllt
Dim listold() As String     'Wird durch listordner() abgefüllt

pfad = InputBox("Bitte geben den Pfad ein")
jahr = InputBox("Bitte geben den Jahr ein")
anzahlDateien = listordner(pfad, jahr, liste, listold)

msgbox "Anzahl:" & cvCrLf & anzahlDateien
msgbox "Anzahl alte Dateien:" & vbCrLf & ubound(listold)+1
msgbox "Dateien im Ordner:" & vbCrLf & join(liste, vbCrLf)
msgbox "Listold:" & vbCrLf & join(listold, vbCrLf)
 
Zuletzt bearbeitet: