Что нового

Поиск файлов на диске и удаление определеного

ArtDevil

Новичок
Сообщения
9
Репутация
0
йа нови4ok в auto It

Что нужно изменить в коде чтоб он удалял находимый файл
и если возможно то искал по всем имеющимся дискам

Код:
#Include <File.au3>

_FindFiles('C:', 'hl.exe')

Func _FindFiles($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
    If Not @error Then
        For $i = 1 To $FileList[0]
            ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles($sRoot & '\' & $FileList[$i], $sFile)
			
        Next
    EndIf
EndFunc
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
1. язык искажать не стоит
2. замени
Код:
ConsoleWrite($sRoot & '\' & $FileList[$i] & @CR)

на
Код:
FileDelete ($sRoot & '\' & $FileList[$i])

3. список имеющихся дисков получишь с помощью
Код:
DriveGetDrive ("FIXED")

ну или любой другой тип диска. гляди справку, на предмет типов.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
ArtDevil
Можно еще так попробовать:
Код:
$sFileNameDel = 'hl.exe'
$iCountFiles = 0
$iCountDel = 0
$aDrive = DriveGetDrive('Fixed')
If @error Then _Error()
For $i = 1 To $aDrive[0]
	$aSearch = _FileSearch($aDrive[$i], $sFileNameDel, 1)
	If @error Then _Error()
	If $aSearch[0] Then
		For $j = 1 To $aSearch[0]
			$iCountFiles += 1
			If Not FileRecycle($aSearch[$j]) Then
				FileSetAttrib($aSearch[$j], '-RSH')
				If FileRecycle($aSearch[$j]) Then
					$iCountDel += 1
				EndIf
			Else
				$iCountDel += 1
			EndIf
		Next
	EndIf
Next
If $iCountFiles Then
	MsgBox(64, 'Info', 'Найдено файлов ' & $sFileNameDel & ': ' & $iCountFiles & @LF & _
			'Удалено файлов ' & $sFileNameDel & ': ' & $iCountDel)
Else
	MsgBox(64, 'Info', 'Нет файлов ' & $sFileNameDel)
EndIf

Func _FileSearch($s_Path_Search, $s_File_Mask = '*', $i_Flag = 0, $i_SubDir = 1)
	;фильтры для поиска нужно указывать через ;
	;$i_Flag = 0 - Файлы и папки (по умолчанию)
	;$i_Flag = 1 - Только файлы
	;$i_Flag = 2 - Только папки
	;$i_SubDir = 1 - Искать во всех подкаталогах (по умолчанию). Возвращает полные пути.
	;$i_SubDir = 0 - Искать только в самой папке. Возвращает только имена файлов(папок).
	Local $s_Out, $a_Out, $s_Read, $h_Dir, $s_Attrib, $s_Subdir, $a_Masks

	If StringRight($s_Path_Search, 1) == '\' Then ;нужно, если $s_Path_Search - диск (например C:\)
		$s_Path_Search = StringTrimRight($s_Path_Search, 1)
	EndIf
	If $i_SubDir Then
		$s_Subdir = ' /S /B'
	Else
		$s_Subdir = ' /B'
	EndIf
	Switch $i_Flag
		Case 1
			$s_Attrib = ' /A-D'
		Case 2
			$s_Attrib = ' /AD'
		Case Else
			$s_Attrib = ' /A'
	EndSwitch
	$s_Out = StringToBinary('0' & @CRLF, 2)
	$a_Masks = StringSplit($s_File_Mask, ';')
	For $i = 1 To $a_Masks[0]
		$h_Dir = Run(@ComSpec & ' /U /C DIR "' & $s_Path_Search & '\' & $a_Masks[$i] & '"' & $s_Subdir & $s_Attrib, @SystemDir, @SW_HIDE, 6)
		If Not $h_Dir Then Return SetError(1)
		While 1
			$s_Read = StdoutRead($h_Dir, False, True)
			If @error Then
				ExitLoop
			EndIf
			If $s_Read <> "" Then
				$s_Out &= $s_Read
			EndIf
			Sleep(10)
		WEnd
	Next
	$a_Out = StringRegExp(BinaryToString($s_Out, 2), '[^\r\n]+', 3)
	If @error Then Return SetError(1)
	$a_Out[0] = UBound($a_Out) - 1
	Return $a_Out
EndFunc   ;==>_FileSearch

Func _Error()
	MsgBox(16, 'Error', 'Произошла какая-то ошибка')
	Exit
EndFunc   ;==>_Error
 
Верх