Più volte mi sono trovato nella necessità di cancellare file vecchi da una cartella .
Utilizzando i comandi dos mi sono trovato spesso delle problematiche dovute alla ricorsività delle sottocartelle.
Pardendo da un vecchio script che mi permetteva di svuotare una cartella e tutte le sue sottocartelle ho rivisto una sua parte creando anche un eventuale log della cancellazione.
L’ho utilizzato spesso in situazioni nella quale esiste una cartella condivisa per lo scambio dei file che ovviamente nessuno mai svuota…
' Script che ripulisce le cartelle e le sottocartelle dai vecchi file.
' Impostare le variabili:
' ExportLog_path : che indica dove posizionare il log della cancellazione
' dstFolder: che indica la cartella da esaminare per procedere alla cancellazione
' MaxAge: retention del file
'
Dim fso, rs, shell, objFolder, objFile, colFiles, DBName, Oggi
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set fso = CreateObject("Scripting.FileSystemObject")
Set rs = CreateObject("Ador.Recordset")
Set shell = CreateObject("WScript.Shell")
' Converte la data sostituendo i separatori
Oggi= Replace(Date,"/","-")
'*** variabile ***
ExportLog_path = "C:\Cartella\Cancellazione_File_"& Oggi &".txt"
'Wscript.Echo "Script partito! " & ExportLog_path
' Creazione/Cancellazione File di output
Set filsSysObj = CreateObject("Scripting.FileSystemObject")
if filsSysObj.FileExists(ExportLog_path ) then
filsSysObj.DeleteFile ExportLog_path
End if
Set LogFile = filsSysObj.OpenTextFile(ExportFile_path, 8, True)
LogFile.Write "*****************************************************"& vbNewLine
LogFile.Write vbNewLine & " PULIZIA FILE"& " - " & Date & vbNewLine
LogFile.Write vbNewLine & "********************************************************************"& vbNewLine
'***********************************************************************************
' FUNZIONI
' Funzione che cancella i file più vecchi di oldday giorni presenti nella cartella sFolder
Function DeleteFiles(oldday, sFolder)
today = Date
Set oFileSys = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder = oFileSys.GetFolder(sFolder)
Set aFiles = oFolder.Files
Set aSubFolders = oFolder.SubFolders
For Each file in aFiles
'dFileCreated = FormatDateTime(file.DateCreated, "2")
dFileCreated = FormatDateTime(file.DateLastModified, "2")
'Wscript.Echo file.name & " - " & file.DateLastModified
If DateDiff("d", dFileCreated, today) > oldday Then
FileNameDelete = file.name
file.Delete(True)
LogFile.Write " - "& sFolder & "\" & FileNameDelete & vbNewLine
End If
Next
End Function
' Funzione che verifica la ricorsività delle cartelle
Function ControlFolder(oldday, dstFolder)
set oFSO = CreateObject("Scripting.FileSystemObject")
set oFolder = oFSO.getfolder(dstFolder)
'Wscript.Echo "Funzione ControlFolder!"
set oSubFolders = oFolder.Subfolders
For Each oSubfolder in oSubFolders
'Wscript.Echo "Funzione ControlFolder -" & oSubfolder
delete = DeleteFiles(oldday,oSubfolder)
' ricicla se trova una sottocartella chiamando la medesima funzione
delete= ControlFolder(oldday, oSubfolder)
Next
delete = DeleteFiles(oldday,dstFolder)
set oFolder = nothing
set oFSO = nothing
End Function
'-----------------------------------------------------------------------------------
' Parte dedicata all'invocazione del Delete
' In caso di cancellazione di più cartelle può essere ripetuta
' è sufficiente andare a copiare e incollare la parte seguente avendo cura di reimpostare le variabili
'*** variabili ***
dstFolder="C:\initpub\logs\logs\LogFiles"
MaxBackupAge = 180
LogFile.Write vbNewLine
LogFile.Write "PULIZIA FILE " & dstFolder & " : "& vbNewLine
LogFile.Write "- File Eliminati:"& vbNewLine
delete = ControlFolder(MaxBackupAge,dstFolder)
'-----------------------------------------------------------------------------------
LogFile.Write vbNewLine & "Pulizia completata"& vbNewLine
Wscript.Echo Now & " - pulizia completata."
Ovviamente se si vuole schedulare lo script conviene commentare i comandi Wscript.Echo.
Ovviamente per cancellare file vecchi da una cartella è necessario che questa esistea, lo script non controlla l’esistenza della cartella. Quindi in caso questa non sia presente o sia protetta con determinati permessi, la cancellazione va in errore.
Ovviamente se abbiamo la neccessità di cancellare file vecchi da più di una cartella, basta che ricopiamo la parte dedicata all’invocazione del delete e andare a inserire una nuova folder.
Lascia un commento