Script per l’eliminazione dei file obsoleti

Spesso capita di dover gestire il backup di alcuni file e di volere mantenere soltanto i più recenti.  Avevo già pubblicato uno script per eliminazione dei file obsoleti in nel post Clear dei file temporanei dell’utente in Windows XP, ma lo script proposto non è così “duttile” per gestire al meglio l’esigenze negli scenari di backup o mantenimento di file recenti.

In questo script VBS che scritto per queste situazioni è possibile specificare la directory in cui eliminare i file file con data creazione superiore ad un numero di giorni specificato e un numero minimo di file che si intende comunque mantenere (utile nel caso ad esempio una procedura di backup fallisse).

Esempio: cscript DeleteOlderFile.vbs  Path Days FilesToMaintain

 

Option Explicit
On Error Resume Next

If WScript.Arguments.Count <> 3 Then
  WScript.Echo “Error: Invalid number of parameters.” & vbCrLf & _
               “Syntax:” & vbCrLf & _
               “DeleteOlderFiles pathDirectory days filesToMaintain”
  WSCript.Quit
End If

Dim pathDirectory
Dim days
Dim filesToMaintain

pathDirectory = WScript.Arguments(0)
days = Int(WScript.Arguments(1))
filesToMaintain = Int(WScript.Arguments(2))

Dim fso, folder, file, olderFilePath, count

Set fso = CreateObject(“Scripting.FileSystemObject”)
Set folder = fso.GetFolder(pathDirectory)
count=0

Do While folder.Files.Count > filesToMaintain
  olderFilePAth = GetOlderFile(folder)

  If olderFilePAth <> “” Then
    Set file = fso.GetFile(olderFilePath)
    If DateDiff(“d”, file.DateLastModified, Now) >= days Then
      file.Delete
      If Not fso.FileExists(olderFilePAth) Then
        count=count+1
      End If
    Else
   Exit Do
    End If
  Else
    Exit Do
  End If
Loop

WScript.Echo count & ” files deleted.”

Set fso = Nothing
Set folder = Nothing
Set file = Nothing

Function GetOlderFile(folder)
  Dim olderFile
  Set olderFile = Nothing
 
  Dim file

  For Each file In folder.Files
    If olderFile Is Nothing Then
      Set olderFile = file
    ElseIf olderFile.DateCreated > file.DateCreated Then
      Set olderFile = file
    End If
  Next

If olderFile Is Nothing Then
    GetOlderFile = “”
Else
    GetOlderFile = olderFile.Path
End If
End Function