This script empty every trash of the system, remove old account listed by AccountsToDelete variable and delete main temp files of every users.
Useful when someone complains about “disk space” on a computer shared by several users.
But be careful! This script is quite straightforward and is not still fully tested.
Put autoit3.exe and autoit3 Include\ dir in CLIENT_CONFIG dir.
once.ins:
[Actions]
DefVar $ProductId$
DefVar $INST_NTVersion$
DefVar $TmpSuffix$
DefVar $AccountsToDelete$
Set $ProductId$ = "cleanup"
; list of accounts to delete separated by a '|'
Set $AccountsToDelete$ = "old_user2|old_user1"
Set $INST_NTVersion$ = GetMsVersionInfo
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$
if ($INST_NTVersion$ >= "6")
Set $TmpSuffix$ = "AppData\Local\Temp"
else
Set $TmpSuffix$ = "Local Settings\Temp"
endif
Message "Remove unused account files. Please wait a while."
ExecWith_account "%ScriptPath%\AutoIt3.exe"
Message "Purge Trash bins. Please wait a while."
DOsInAnIcon_trash
Message "Remove tmp files. Please wait a while."
ExecWith_temp "%ScriptPath%\AutoIt3.exe"
[DOsInAnIcon_trash]
rd /S /Q %SystemDrive%\$Recycle.Bin
[ExecWith_account]
#include <File.au3>
Local $AccountsToDelete = StringSplit("$AccountsToDelete$", "|")
Local $AccountDir = "%ProfileDir%"
$DirList = _FileListToArray($AccountDir, "*", 2)
If IsArray($DirList) == 0 Then
;MsgBox(0, "", "No Folders Found.")
ConsoleWrite("No Folders Found in dir " & $AccountDir & @CRLF)
Exit
EndIf
For $i = 1 To $DirList[0]
Local $CurrentAccount = $DirList[$i]
ConsoleWrite("Check " & $CurrentAccount)
For $j = 1 To $AccountsToDelete[0]
Local $AccountToDelete = $AccountsToDelete[$j]
;ConsoleWrite(":" & $CurrentAccount & ":" & $AccountToDelete & ":" & @CRLF)
If $CurrentAccount == $AccountToDelete Then
ConsoleWrite(": delete it")
DirRemove($AccountDir & "\\" & $CurrentAccount, 1)
ExitLoop
EndIf
Next
ConsoleWrite(@CRLF)
Next
[ExecWith_temp]
; remove only content of temp dir
#include <File.au3>
Local $ProfileDir = "%ProfileDir%"
Local $TmpSuffix = "$TmpSuffix$"
Local $DirList = _FileListToArray($ProfileDir, "*", 2)
If @error = 1 Then
ConsoleWrite("No Folders Found in dir " & $ProfileDir & @CRLF)
Exit
EndIf
For $i = 1 To $DirList[0]
Local $CurrentAccount = $DirList[$i]
Local $TmpDir = $ProfileDir & "\" & $CurrentAccount & "\" & $TmpSuffix
ConsoleWrite("Delete tmp files of " & $TmpDir & @CRLF)
Local $FileList = _FileListToArray($TmpDir, "*")
If IsArray($FileList) == 0 Then
ConsoleWrite(" no tmp file found" & @CRLF)
ContinueLoop
EndIf
ConsoleWrite(" nb of files or folders : " & $FileList[0] & @CRLF)
For $j = 1 To $FileList[0]
Local $TmpFile = $TmpDir & "\" & $FileList[$j]
;ConsoleWrite(" remove file: " & $tmpFile & @CRLF)
DirRemove($TmpFile, 1)
FileDelete($TmpFile)
Next
ConsoleWrite(@CRLF)
Next