Что нового

[Файловая система] Как удалить мусор после работы скрипта?

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt: v.3.3.8.1
В работе скрипта используется распаковка zip архивов. После во временной папке остается очень много папок (плоды распаковок)
Хотелось бы использовать вот такой код:
Код:
Func _Clear_Temp()
RunWait(@COMSPEC & 'cd /d "%temp%" && rd /s /q "."')
EndFunc

Не пойму почему открывается окно консоли и все...

Получилось вот так:
Код:
Func _Clear_Temp()
RunWait(@ComSpec & " /c " & 'cd /d "%temp%" && rd /s /q "."', "", @SW_HIDE)
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Есть у меня по теме вот что:

Код:
#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
 
Верх