#include <File.au3>
HotKeySet("^+q", "Quit")
$iRecycleOrDelete = 1 ;Заменяем на 2 если нужно удалять без корзины, 1 для помещения в корзину
$sTempPath = @TempDir
$sLogFile = @ScriptDir & "\Temp_Cleaner_Log.log"
$sTempDirName = StringRegExpReplace($sTempPath, "^.*\\", "")
$aTempFilesArr = _FileListToArray($sTempPath, "*.*")
If Not IsArray($aTempFilesArr) Then
MsgBox(262144+48, "Внимание!", "Временная Папка пуста." & @LF & @LF & "OK ---> EXIT")
Exit
EndIf
$sGlobalDelText = "будут перемещены в корзину"
If $iRecycleOrDelete = 2 Then $sGlobalDelText = "будут удалены безвозвратно"
$iConfirm = MsgBox(256+262144+36, "Запрос на удаление...", _
StringFormat("Вы подтверждаете удаление ВСЕХ файлов и папок из временного каталога? \n<%s>\n\nФайлы %s, продолжить?", $sTempPath, $sGlobalDelText))
If $iConfirm <> 6 Then Exit
ProgressOn("Чистка временного каталога...", "Чищу файлы и папки в " & $sTempDirName & "...", $sTempPath, Default, Default, 16)
FileChangeDir($sTempPath)
$iPrecentRange = _GetPrecentRange(UBound($aTempFilesArr)-1)
$iTimerStart = TimerInit()
$iPrecent = $iPrecentRange
$sDateTime = @MDAY & "/" & @MON & "/" & @YEAR & ", " & @HOUR & ":" & @MIN & ":" & @SEC
$sLogData = @CRLF & "Чистка временного каталога началась -> [" & $sDateTime & "]" & @CRLF & _
"_________________________________________________________" & @CRLF
$sFileDirText = "Файл"
$sGlobalDelText = "Помещаю в корзину"
If $iRecycleOrDelete = 2 Then $sGlobalDelText = "Удаляю"
For $i = 1 To UBound($aTempFilesArr)-1
$sCurrentFileName = $aTempFilesArr[$i]
$sDateTime = @MDAY & "/" & @MON & "/" & @YEAR & ", " & @HOUR & ":" & @MIN & ":" & @SEC
If _IsDir($sCurrentFileName) Then
If $iRecycleOrDelete = 2 Then $iErrCheck = DirRemove($sCurrentFileName, 1)
$sLogData &= $sDateTime & ">> " & $sGlobalDelText & " каталог <" & $sCurrentFileName & ">: "
$sFileDirText = "каталог"
Else
If $iRecycleOrDelete = 2 Then $iErrCheck = FileDelete($sCurrentFileName)
$sLogData &= $sDateTime & ">> " & $sGlobalDelText & " файл <" & $sCurrentFileName & ">: "
EndIf
If $iRecycleOrDelete = 1 Then $iErrCheck = FileRecycle($sCurrentFileName)
If $iErrCheck = 1 Then
$sLogData &= "OK" & @CRLF
Else
$sLogData &= "Не удалось переместить " & $sFileDirText & ", возможно он занят другим процессом." & @CRLF
EndIf
ProgressSet($iPrecent, $sCurrentFileName)
$iPrecent += $iPrecentRange
If $iPrecent > 100 Then $iPrecent = $iPrecentRange
Next
FileWrite($sLogFile, $sLogData)
ProgressOff()
$sCleaningTime = _SecsToTime(Round(TimerDiff($iTimerStart)/1000))
$sGlobalDelText = "Перемещены в корзину"
If $iRecycleOrDelete = 2 Then $sGlobalDelText = "Удалены"
$iAsk = MsgBox(36, "Окончание!", _
StringFormat("Готово! - файлы и папки из временного каталога <%s> %s\n\nОбщее время чистки: %s\n\nПоказать Лог-файл?", $sTempDirName, $sGlobalDelText, $sCleaningTime))
If $iAsk = 6 Then
Run("Notepad.exe " & $sLogFile, @ScriptDir, @SW_SHOWNORMAL)
EndIf
Func _SecsToTime($iTicks, $sDelim = ":")
If Number($iTicks) >= 0 Then
$iHours = Int($iTicks / 3600)
$iTicks = Mod($iTicks, 3600)
$iMins = Int($iTicks / 60)
$iSecs = Round(Mod($iTicks, 60))
If StringLen($iHours) = 1 Then $iHours = "0" & $iHours
If StringLen($iMins) = 1 Then $iMins = "0" & $iMins
If StringLen($iSecs) = 1 Then $iSecs = "0" & $iSecs
Return $iHours & $sDelim & $iMins & $sDelim & $iSecs
Else
Return SetError(1, 0, 0)
EndIf
EndFunc
Func _GetPrecentRange($iFilesCount)
Local $iPrecentRange = 1
If $iFilesCount > 100 Then
$iPrecentRange = Round($iFilesCount/100)
Else
$iPrecentRange = Round(100/$iFilesCount)
EndIf
If $iPrecentRange < 1 Then $iPrecentRange = 1
Return $iPrecentRange
EndFunc
Func _IsDir($sPath)
Return StringInStr(FileGetAttrib($sPath), "D")
EndFunc
Func Quit()
Local $iAskQuit = MsgBox(262144+36, "Внимание!", "Вы уверены что хотите прервать удаление?")
If $iAskQuit = 6 Then Exit
EndFunc