Utility per file temporanei.
Esiste una utility che esegue lo svuotamento in automatico delle cartelle dei file temporanei.
Questa piccola ma funzionale utility, provvede alla cancellazione di tutti i file temporanei delle navigazioni web, i file presenti in cartella TEMP e TMP.
Molto utile anche nel caso si voglia farlo avviare in automatico ad ogni sessione di Windows. Questo script funziona sia con Windows Vista, che con la sua SP1 ed inoltre con Windows XP.
Per eseguire la pulizia dei file temporanei basta un doppio click sul file, che si andrà a creare col codice presente dopo l’articolo, e di seguito, visualizzare i file cancellati e i Kb recuperati.
Ora si andrà ad illustrare come, con Windows Vista, tramite il comando SetupComplete.cmd è possibile installare automaticamente un comando batch in avvio.
SetupComplete.cmd - è per mezzo di questo comando che Windows Vista installa un qualsiasi file batch PRIMA di caricare Windows.
Vista prima di avviarsi , cerca nella cartella C:\Windows\Setup\Scripts, l'esistenza di un file che deve avere come nome SetupComplete.cmd. Qualora venga trovato un file con questo nome ed estensione, lo stesso viene caricato ed eseguito.
In definitiva, se si vuole che Vista esegua una procedura automatica in avvio, ad esempio in file per la pulizia dei temporanei, è consigliabile creare un file di testo con gli appositi comandi e di copiarlo nella cartella C:\Windows\Setup\Scripts con il nome Setupcomplete.cmd. Ovviamente se la cartella non esiste va creata.
Di seguito le linee di codice da copiare ed incollare in un file di testo:
Option Explicit
Dim fso, ws, Title
Set fso = CreateObject("Scripting.FileSystemObject")
Set ws = WScript.CreateObject("WScript.Shell")
Title = "Temp File Cleaner"
Dim TmpDir : TmpDir = ws.Environment("Process")("Temp")
ChkTmpSafe
Dim OldTmpSize : OldTmpSize = fso.GetFolder(TmpDir).size
Dim arFiles(), cnt, dcnt, Fldr, SubFldr, File
cnt = -1
dcnt = 0
DelTmpFiles TmpDir
DelEmptyFldrs TmpDir
Dim strF, strD, RptSize, TotSave
CalcSave
If dcnt >= 1 Then ws.Popup cnt & strF & dcnt & _
strD & vbCrLf & vbCrLf & RptSize & vbCrLf & _
vbCrLf & TotSave,60,Title
Cleanup
Sub ChkTmpSafe
Dim Drv, Unsafe, WinDir, ComDir, PgmDir, SysDir, UnsafeDir
If TmpDir = "" Then
ws.Popup "Unsafe condition detected. %TEMP% " _
"Variable is not set.",60,Title,16
Cleanup
WScript.Quit
End If
If Not fso.FolderExists(TmpDir) Then
fso.CreateFolder(TmpDir)
Cleanup
WScript.Quit
End If
For Each Drv In fso.Drives
'If a drive or partition is not formatted, an error occurs
On Error Resume Next
If Drv.DriveType = 2 Or Drv.DriveType = 3 Then _
Unsafe = Unsafe & Drv.RootFolder & "|"
On Error GoTo 0
Next
Unsafe = Unsafe & fso.GetSpecialFolder(0) & "|"
Unsafe = Unsafe & fso.GetSpecialFolder(0) & "\Command|"
Unsafe = Unsafe & ws.RegRead("HKLM\Software\Microsoft" _
& "\Windows\CurrentVersion\ProgramFilesPath") & "|"
Unsafe = Unsafe & fso.GetSpecialFolder(1)
Unsafe = Split(Unsafe, "|", -1, 1)
For Each UnsafeDir In Unsafe
If UCase(UnsafeDir) = UCase(TmpDir) Or _
UCase(UnsafeDir) & "\" = UCase(TmpDir) Or _
UCase(UnsafeDir) = UCase(TmpDir) & "\" Then
ws.Popup "Unsafe condition detected. %TEMP% " _
"Variable is set to " & TmpDir,60,Title,16
Cleanup
WScript.Quit
End If
Next
End Sub
Sub DelTmpFiles(FldrSpec)
Set Fldr = fso.GetFolder(FldrSpec)
For Each File In Fldr.Files
cnt = cnt + 1
ReDim Preserve arFiles(cnt)
Set arFiles(cnt) = File
Next
For Each SubFldr in Fldr.SubFolders
DelTmpFiles SubFldr
Next
For Each File in arFiles
On Error Resume Next
File.Delete True
If Err.Number = 0 Then dcnt = dcnt + 1
Err.Clear
Next
End Sub
Sub DelEmptyFldrs(FldrSpec)
Set Fldr = fso.GetFolder(FldrSpec)
For Each SubFldr in Fldr.SubFolders
DelEmptyFldrs SubFldr
Next
On Error Resume Next
If UCase(Fldr.Path) <> UCase(TmpDir) Then
If Fldr.Files.Count = 0 Then
If Fldr.SubFolders.Count = 0 Then
Fldr.Delete
End If
End If
End If
If Err.Number = 76 Then
Err.Clear
On Error GoTo 0
DelEmptyFldrs(TmpDir)
End If
End Sub
Sub CalcSave
Dim NewTmpSize, SaveSize, s1, s2
Dim TmpClnLog, OldSave, HideLog, Log
NewTmpSize = fso.GetFolder(TmpDir).size
SaveSize = OldTmpSize - NewTmpSize
s1 = " free space reclaimed."
If SaveSize < 1024 Then
RptSize = SaveSize & " bytes" & s1
ElseIf SaveSize < 1048576 Then
RptSize = Round(SaveSize / 1024) & " KB" & s1
Else RptSize = Round(SaveSize / 1048576) & " MB" & s1
End If
Log = fso.GetSpecialFolder(0) & "\TempClean.Log"
If Not fso.FileExists(Log) Then fso.CreateTextFile(Log)
If fso.GetFile(Log).Size = 0 Then
Set TmpClnLog = fso.OpenTextFile(Log, 8, True)
TmpClnLog.WriteBlankLines(1)
End If
Set TmpClnLog = fso.OpenTextFile(Log, 1)
OldSave = TmpClnLog.ReadLine
If Not IsNumeric(OldSave) Then OldSave = 0
TotSave = OldSave + SaveSize
Set TmpClnLog = fso.OpenTextFile(Log, 2)
TmpClnLog.WriteLine TotSave
TmpClnLog.Close
s2 = " reclaimed to date."
If TotSave < 1024 Then
TotSave = TotSave & " bytes" & s2
ElseIf TotSave < 1048576 Then
TotSave = Round(TotSave / 1024) & " KB" & s2
Else TotSave = Round(TotSave / 1048576) & " MB" & s2
End If
cnt = cnt + 1
If cnt = 1 Then strF = " file found, " _
Else strF = " files found, "
If dcnt = 1 Then strD = " file deleted." _
Else strD = " files deleted."
Set TmpClnLog = Nothing
End Sub
Sub Cleanup
Set fso = Nothing
Set ws = Nothing
Set Fldr = Nothing
End Sub