Что нового

Скрипт на почистку Prefetch & Temp

scanfail

Знающий
Сообщения
244
Репутация
17
Прошу помочь, пробовал всячески, читал везде где только можно, но так и не нашел рабочий вариант... Хотелось бы создать мультисистемную утилитку, которая чистила бы реестр от мусора и т.д.

Так тоже не чистит:
Код:
FileDelete(@TempDir & "\")
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
А в F1 по FileDelete написано (клик):

Пример
FileDelete("D:\*.tmp") ; удаляет все файлы с расширением .tmp из корня диска D:\

Так что может стоит указать что удалять - маску файлов ?
Код:
FileDelete(@TempDir & "\*.tmp")
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Не помог этот скрипт зак, кстати, его первым пробовал ;)
 

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
Удаление файлов по маске к сожалению не прокатит с вложеными папками

Удалить содержимое папки можно например так:
Сначала получить список файлов и папок из нужной папки.
Потом циклом, подставляя имена файлов/папок удалить их.


Либо самый просто вайриант
Код:
DirRemove("FolderPath")
DirCreate("FolderPath")

Удалит папку со всем содержимым а потом создаст новую с таким же именем
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
scanfail [?]
Не помог этот скрипт зак, кстати, его первым пробовал
wink.gif

Скрипт не хочет удалять файлы, если в начале имени стоит "~". Остальные он удаляет без особых проблем
 

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
Код:
$aFileList = _FileListToArray(@TempDir, "*", 1)
$aFolderList = _FileListToArray(@TempDir, "*", 2)

For $i = 1 To UBound($aFileList)-1
    FileDelete($aFileList[$i])
Next
For $i = 1 To UBound($aFolderList)-1
    DirRemove($aFolderList[$i])
Next


вот грубый вариант
Удаление файлов отдельно, вложеных папок (с вложеными файлами) отдельно
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
scanfail
попробуй переименовать сначала файл ~абракадарбу.tmp в абракадарбу.tmp, а потом эту абракадарбу.tmp удалить...

Раз они не удаляются - значит они для чего-то все еще нужны...
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
или так ..вариант без грубостей ;)

Код:
$aReturn = _FileSearch(@TempDir, "*")
For $id = 1 To $aReturn[0]
    FileDelete($aReturn[$id])
    DirRemove($aReturn[$id],1)
    Next
ShellExecute(@TempDir)

Func _FileSearch($sPath, $sFileMask = "*", $iFlag = 0, $iSubDir = 1, $iSort = 0)
    Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib, $sFiles

    If Not StringInStr(FileGetAttrib($sPath), "D") Then
        Return SetError(1, 0, 0)
    EndIf

    If $iSubDir = 1 Then
        $sAttrib &= ' /S'
    EndIf

    If $iSort = 1 Then
        $sAttrib &= ' /O:N'
    EndIf

    Switch $iFlag
        Case 1
            $sAttrib &= ' /A-D'
        Case 2
            $sAttrib &= ' /AD'
        Case Else
            $sAttrib &= ' /A'
    EndSwitch

    $sOut = StringToBinary('0' & @CRLF, 2)
    $sPath = StringRegExpReplace($sPath, '\\+$', '')
    $sFileMask = StringRegExpReplace($sFileMask, '^;+|;+$', '')
    $sFileMask = StringRegExpReplace($sFileMask, ';{2,}', ';')
    $aMasks = StringSplit($sFileMask, ';')

    For $i = 1 To $aMasks[0]
        If StringStripWS($aMasks[$i], 8) = "" Then
            ContinueLoop
        EndIf

        $sFiles &= '"' & $sPath & '\' & $aMasks[$i] & '"'

        If $i < $aMasks[0] Then
            $sFiles &= ';'
        EndIf
    Next

    $hDir = Run(@ComSpec & ' /U /C DIR ' & $sFiles & ' /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)

    While 1
        $sRead = StdoutRead($hDir, False, True)

        If @error Then
            ExitLoop
        EndIf

        If $sRead <> "" Then
            $sOut &= $sRead
        EndIf
    Wend

    $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)

    If @error Or UBound($aOut) < 2 Then
        Return SetError(2, 0, 0)
    EndIf

    $aOut[0] = UBound($aOut)-1
    Return $aOut
EndFunc
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Спасибо Александру и Arei за отличные скрипты, а также всем тем, кто отписался и попытался помочь мне. :IL_AutoIt_1:
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
scanfail
Есть у меня аналогичный au3 с перебором всех файлов, но я всётаки оставил bat-файл ради универсальности. Пользуюсь этим уже долго
Код:
cd /d "%temp%" && rd /s /q "."
Кстати давненько делал утилиту TweakerXP и там есть кнопка - создать ярлык "Очистка Temp", "Выкл", "Перезагрузка". Одним кликом создаётся bat-файл в нужном каталоге и с ярлыком на рабочем столе.
 
Верх