Erkennung, ob eine neue Datei in einem Ordner ist

  • VBScript

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Krumnix.

    Erkennung, ob eine neue Datei in einem Ordner ist

    Hallo.

    Mein VBS kann ich zeitlich oder event gesteuert aufrufen.

    Hier soll dann in einem Ordner nachgeschaut werden, ob eine neue Datei in dem Ordner drin ist. Die Anzahl der Dateien in dem Ordner schwanken recht hoch. Ich weiß also nie genau, wieviele drin sind. Also vorher.

    Ich will nur die neues Datei erkennen, diese Auslesen und dann löschen.

    Wie mach ich das unter VBS?

    Danke
    So, hier meine Lösung, die ich selbst herausgefunden habe:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Function action
    3. 'Erkennung einer Datei in einem Ordner
    4. Dim fso, Pfad, Ordner, dateiliste, d, s
    5. Pfad = "c:\blablabla" 'Pfadname zur XML-Datei definieren
    6. Set fso = CreateObject("Scripting.FileSystemObject") 'Instanz auf FileSystem erzeugen und in fso schreiben
    7. Set Ordner = fso.GetFolder(Pfad) 'Instanz auf Ordner mit Pfadangabe erzeugen
    8. Set dateiliste = Ordner.Files 'Alle Dateien im Ordner in eine Liste schreiben
    9. For Each d In dateiliste
    10. s = d.name 'Letzte Datei in Liste finden und Pfadangabe ins System übergeben
    11. Next
    12. If Len(s) > 0 Then 'Wenn neue Datei im System ist, auslesen
    13. Dim objTag
    14. objTag = s
    15. End If
    16. End Function
    Hi

    Wenn ich dich richtig verstanden habe, möchtest du herrausfinden, ob es eine NEUE Datei in einem Ordner gibt ?
    D.h.
    Dein Script läuft bsp als geplanter Task jede Stunde und du willst wissen, ob und welche Datei in der letzten stunde erstellt wurden ?
    Dazu musst du doch nur schauen, ob eine Datei ein Erstellungsdatum größer Now() - 1 Stunde hat.

    Visual Basic-Quellcode

    1. Dim fso
    2. Set fso = CreateObject("Scripting.FileSystemObject")
    3. Dim search, count, filePaths, newestPath, File
    4. Set newestPath = Nothing
    5. Set filePaths = CreateObject("Scripting.Dictionary")
    6. count = 0
    7. search = "D:\FW"
    8. For Each File In fso.GetFolder(search).Files
    9. If DateDiff("h",File.DateCreated,Now) < 1 Then
    10. filePaths.Add File.Path, File.DateCreated
    11. If newestPath Is Nothing Then
    12. Set newestPath = File
    13. Elseif newestPath.DateCreated < File.DateCreated Then
    14. set newestPath = File
    15. End If
    16. count = count + 1
    17. End If
    18. Next
    19. If Not newestPath Is nothing Then WSH.Echo "NEUESTE DATEI: " & newestPath.path & " ERSTELLT AM: " & newestPath.DateCreated & VbCrLf
    20. Dim keys, it
    21. keys = filePaths.keys
    22. WSH.Echo "ALLE (" & count & ") Dateien die in der letzten Stunde erstellt wurden: " & VbCrLf
    23. For Each it In keys
    24. WSH.Echo it & " ERSTELLT AM: " & filePaths.Item(it)
    25. Next
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mono“ ()

    Nicht ganz. Der Trigger für das Script steht bei 1s. Wenn eine Datei im Ordner erscheint, wird sie gelesen, ausgewertet und dann gelöscht.

    Somit ist nie mehr als eine Datei im Ordner. Und wenn mal mehr drin sind, also mein Programm deaktiviert wurde, dann arbeitet er alle Dateien ab. Die sind zwar nicht zeitlich korrekt sortiert, aber das macht bei meiner Anwendung nix aus.

    Dein Script dafür ist aber auch interessant, wenn ich mal die neues in einem Ordner finden muss, ohne diese dann zu löschen. ;)