Что нового

Поиск файлов с определенным расширением

ZanMax

Тестер
Сообщения
120
Репутация
5
Добрый день,
Пишу программу для чистки ненужных файлов. У меня есть список расширений например (mp3,avi,doc,tmp,bak)
Как пройтись по диску и удалить все файлы с такими типами?
Нашел пример:
Код:
#include <File.au3>
#include <Array.au3>

Example()

Func Example()
    ; List all the files and folders in the desktop directory using the default parameters.
    Local $aFileList = _FileListToArray("c:\", "*.tmp")
    If @error = 1 Then
        MsgBox(0, "", "Path was invalid.")
        Exit
    EndIf
    If @error = 4 Then
        MsgBox(0, "", "No file(s) were found.")
        Exit
    EndIf
    ; Display the results returned by _FileListToArray.
    _ArrayDisplay($aFileList, "$aFileList")
EndFunc   ;==>Example


Но она ищет только в заданной папке. Как пройтись по всему диску и удалить файлы?
Спасибо большое!
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
С рекурсией:

Код:
Const $aRemove[3] = [ 2, "*.tmp", "*.mp3" ]

_Main_RemoveFiles( "D:\" )
Func _Main_RemoveFiles( $sPath )
	Local $aDir, $aFile, $Idx, $Idx2
	; ---
	For $Idx = 1 To $aRemove[0] Step 1
		$aFile = __GetFileList( $sPath, $aRemove[$Idx], 1 )
		If Not @Error Then
			For $Idx2 = 1 To $aFile[0] Step 1
				FileDelete( $sPath & $aFile[$Idx2] )
				TrayTip( "Remove...", $sPath & $aFile[$Idx2], 2, 1 )
			Next
		EndIf
	Next

	$aDir = __GetFileList( $sPath, '*', 2 )
	If Not @Error Then
		For $Idx = 1 To $aDir[0] Step 1
			_Main_RemoveFiles( $sPath & $aDir[$Idx] & "\" )
		Next
	EndIf
EndFunc

Func __GetFileList( $sPath, $sFilter = '*', $iFlag = 0)
	Local $hSearch, $sFile, $sFileList, $sDelim = "|", $aRet

	$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\"
	If Not FileExists($sPath) Then _
		Return SetError(1, 1, "")
	If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then _
		Return SetError(2, 2, "")
	If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then _
		Return SetError(3, 3, "")

	$hSearch = FileFindFirstFile($sPath & $sFilter)
	If @error Then Return _
		SetError(4, 4, "")

	While 1
		$sFile = FileFindNextFile($hSearch)
		If @Error Then _
			ExitLoop
		If ($iFlag + @Extended = 2) Then _
			ContinueLoop

		$sFileList &= $sDelim & $sFile
	WEnd
	FileClose($hSearch)

	If Not $sFileList Then _
		Return SetError(4, 4, "")

	$aRet = StringSplit( StringTrimLeft($sFileList, 1), "|" )
	Return $aRet
EndFunc   ;==>__GetFileList
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
ZanMax
_FO_FileSearch()
http://autoit-script.ru/index.php/topic,14598.0.html
 
Верх