'A utility to delete XP and Vista temp files directory.
'Utility di cancellazione dei file temporanei in Windows Vista e XP
'Potete inserire questo file in avvio di Windows -  come spiegato in questo articolo http://www.wintricks.it/vista/trick35.html
'I file inutili verranno cancellati in avvio.
'http://www.wintricks.it/vista/in-tricks.html - Modified by WinTricks.it
'Thanks to Bill James.
'www.billsway.com.

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