Cancellare file vecchi da una cartella con VBScript

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

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *