DateDiff Funktion - Überprüfung eines Ordners auf Änderungen

  • VBScript

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

    DateDiff Funktion - Überprüfung eines Ordners auf Änderungen

    Hallo Zusammen,

    Ich habe eine Script geschrieben, welches mir die aktuell geänderte Datei eines Ordners in einem bestimmten Zeitintervall ausgeben soll.
    Soweit funktioniert es auch. Wenn ich aber eine neue Datei in den Ordner packe, wird diese Datei bei der Suche nicht berücksichtigt.

    Hier mal mein Script:

    Visual Basic-Quellcode

    1. sPath = "D:\Test"
    2. sExt = "txt"
    3. 'Zeitangabe:
    4. intTime = 89280
    5. 'Intervalangabe:
    6. ' yyyy - Jahr
    7. ' q - Quartal
    8. ' m - Monat
    9. ' y - xter Tag eines Jahres
    10. ' d - Tag
    11. ' w - Wochentag
    12. ' ww - xte Woche eines Jahres
    13. ' h - Stunde
    14. ' n - Minute
    15. ' s - Sekunde
    16. interval = "n"
    17. If interval = "yyyy" Then
    18. Zeiteinheit = "Jahr(e)"
    19. ElseIf interval = "q" Then
    20. Zeiteinheit = "Quartal(e)"
    21. ElseIf interval = "m" Then
    22. Zeiteinheit = "Monat(e)"
    23. ElseIf interval = "y" Then
    24. Zeiteinheit = "Tag(e) eines Jahres"
    25. ElseIf interval = "d" Then
    26. Zeiteinheit = "Tag(e)"
    27. ElseIf interval = "w" Then
    28. Zeiteinheit = "Wochentag(e)"
    29. ElseIf interval = "ww" Then
    30. Zeiteinheit = "Woche(n) eines Jahres"
    31. ElseIf interval = "h" Then
    32. Zeiteinheit = "Stunde(n)"
    33. ElseIf interval = "n" Then
    34. Zeiteinheit = "Minute(n)"
    35. ElseIf interval = "s" Then
    36. Zeiteinheit = "Sekunde(n)"
    37. End If
    38. Set oFSO = CreateObject("Scripting.FileSystemObject")
    39. Set oFolder = oFSO.GetFolder(sPath)
    40. Set oFiles = oFolder.Files
    41. sNewestFile = ""
    42. intZahl = 0
    43. For Each oFile In oFiles
    44. If lcase(oFSO.GetExtensionName(oFile)) = sExt then
    45. sNewestFile = oFile.Path
    46. fromDate = oFile.DateLastModified
    47. toDate = Now()
    48. dDateDiff = DateDiff(interval,fromDate,toDate)
    49. If intTime > dDateDiff Then
    50. sNewestFile = oFile.Path
    51. intZahl = intZahl + 1
    52. End If
    53. End If
    54. Next
    55. If intTime > dDateDiff Then
    56. WScript.echo "Gewähltes Intervall: " & intTime & " " & Zeiteinheit & vbCrLf _
    57. & "Neueste geänderte Datei in angegebenem Intervall: " & sNewestFile
    58. Else
    59. WScript.echo "Gewähltes Intervall: " & intTime & " " & Zeiteinheit & vbCrLf _
    60. & "Keine geänderte Datei in angegebenem Intervall gefunden."
    61. End If


    Könnt ihr mir helfen und sagen, was ich falsch gemacht habe?

    Ziel ist es mit dem Script zu prüfen, ob der Kopiervorgang erfolgreich durchgeführt wurde, indem es mir die aktuell geänderte Datei ausgibt..

    Vielen Dank schon einmal für die Hilfe.


    Viele Grüße
    p41n

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „p41n“ ()

    Nach Studie einiger andere Beispiele habe ich mein Script nun folgendermaßen abgeändert:

    Visual Basic-Quellcode

    1. sPath = "D:\Test"
    2. sExt = "txt"
    3. 'Zeitangabe:
    4. intTime = 3
    5. 'Intervalangabe:
    6. ' yyyy - Jahr
    7. ' q - Quartal
    8. ' m - Monat
    9. ' y - xter Tag eines Jahres
    10. ' d - Tag
    11. ' w - Wochentag
    12. ' ww - xte Woche eines Jahres
    13. ' h - Stunde
    14. ' n - Minute
    15. ' s - Sekunde
    16. interval = "m"
    17. If interval = "yyyy" Then
    18. Zeiteinheit = "Jahr(e)"
    19. ElseIf interval = "q" Then
    20. Zeiteinheit = "Quartal(e)"
    21. ElseIf interval = "m" Then
    22. Zeiteinheit = "Monat(e)"
    23. ElseIf interval = "y" Then
    24. Zeiteinheit = "Tag(e) eines Jahres"
    25. ElseIf interval = "d" Then
    26. Zeiteinheit = "Tag(e)"
    27. ElseIf interval = "w" Then
    28. Zeiteinheit = "Wochentag(e)"
    29. ElseIf interval = "ww" Then
    30. Zeiteinheit = "Woche(n) eines Jahres"
    31. ElseIf interval = "h" Then
    32. Zeiteinheit = "Stunde(n)"
    33. ElseIf interval = "n" Then
    34. Zeiteinheit = "Minute(n)"
    35. ElseIf interval = "s" Then
    36. Zeiteinheit = "Sekunde(n)"
    37. End If
    38. Set oFSO = CreateObject("Scripting.FileSystemObject")
    39. Set oFolder = oFSO.GetFolder(sPath)
    40. Set oFiles = oFolder.Files
    41. For Each oFile In oFiles
    42. If lcase(oFSO.GetExtensionName(oFile)) = sExt then
    43. fromDate = oFile.DateLastModified
    44. toDate = Now()
    45. dDateDiff = DateDiff(interval,fromDate,toDate)
    46. If dDateDiff < intTime Then
    47. liste = liste & oFile.name & vbCrLf
    48. End If
    49. End If
    50. Next
    51. If liste = "" Then
    52. WScript.echo "Gewähltes Intervall: " & intTime & " " & Zeiteinheit & vbCrLf _
    53. & "Keine geänderte Datei in angegebenem Intervall gefunden."
    54. Else
    55. WScript.echo "Gewähltes Intervall: " & intTime & " " & Zeiteinheit & vbCrLf _
    56. & "Neueste geänderte Datei in angegebenem Intervall: " & vbCrLf & liste
    57. End If


    Nun gibt er mir eine Liste mit allen zuletzt geänderten Dateien im gewünschten Zeitraum des gewählten Ordners aus.
    Ich möchte aber nur die jüngste zuletzt geänderte Datei ausgeben lassen.

    Kann mir jemand helfen?


    VG p41n

    p41n schrieb:

    Ich möchte aber nur die jüngste zuletzt geänderte Datei ausgeben lassen.
    Was hältst du davon:

    Visual Basic-Quellcode

    1. Function LatestModifiedFile(Directory, Extension, ModDate)
    2. Set FS = CreateObject("Scripting.FilesystemObject")
    3. Set Path = FS.GetFolder(Directory)
    4. ModDate = 0
    5. For Each File In Path.Files
    6. If Right(File.Name, Len(Extension)) = Extension Then
    7. FileDate = File.DateLastModified
    8. If ModDate = 0 Then ModDate = FileDate
    9. If ModDate <= FileDate Then
    10. LatestModifiedFile = File.Path
    11. ModDate = FileDate
    12. End If
    13. End If
    14. Next
    15. End Function
    16. 'Aufruf:
    17. Dim ModDate
    18. WScript.Echo LatestModifiedFile("c:\Temp", "", ModDate), ModDate
    19. WScript.Echo LatestModifiedFile("c:\Temp", ".txt", ModDate), ModDate
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Danke für die Hilfe..

    So richtig hat es mich leider nicht weitergebracht.

    Ich bleibe aber nun bei meiner Methode.

    Es geht sowieso nur darum einen Ordner zu prüfen, ob eine Sicherungsdatei erfolgreich kopiert wurde.
    Da der Ordner aber mehrere Dateien enthält, musste ich prüfen, welche die aktuellste ist.
    Die Sicherung wird zweimal am Tag ausgeführt und 5 Minuten nach der eigentlichen Sicherung, wird das Script per Task ausgeführt und überprüft, ob die Datei erfolgreich kopiert wurde und gibt sie mir in einer Logdatei aus. Da in dem Intervall von 10 Minuten sowieso nur eine Datei gefunden wird, ist die Ausgabe demnach auch nicht weiter tragisch.

    Also alles wunderbar. Trotzdem vielen Dank für eure Hilfe.


    Viele Grüße
    p41n