Global $iDeleted = 0, $sDeleted_FilesList = "" Global $aFilesList = _FileListToArrayEx(@ScriptDir, "*.*") For $i = 1 To $aFilesList[0] If Not StringRegExp($aFilesList[$i], "(?i)\.(pef|dng)\z") Then ContinueLoop ;Не обрабатываем если расширение не "pef" и не "dng" If StringInStr(FileGetAttrib($aFilesList[$i] & "\"), "D") Then ContinueLoop ;Не обрабатываем если текущий путь это каталог $sJpgFileName = StringRegExpReplace($aFilesList[$i], "\.[^\.]*$", ".jpg") If Not FileExists($sJpgFileName) And FileDelete($aFilesList[$i]) Then $iDeleted += 1 $sDeleted_FilesList &= $aFilesList[$i] & @CRLF EndIf Next If $iDeleted > 0 Then MsgBox(64, "Результат", StringFormat("Список файлов которые были удалены [%i]:\n\n%s", $iDeleted, $sDeleted_FilesList)) Else MsgBox(64, "Результат", "Ни один файл небыл удалён.") EndIf Func _FileListToArrayEx($sPath, $sMask="*", $iMode=-1) ;$iMode > 0 только папки (маска игнорируется), иначе папки + файлы If Not StringInStr(FileGetAttrib($sPath & "\"), "D") Then Return SetError(1, 0, 0) Local $hSearch, $sFindNext, $sFilePath, $iPathIsFolder, $i = 0 Local $sRegExpFilter = StringReplace(StringReplace($sMask, ".", "\."), "*", ".*") Local $iMax_Ret_Paths = 10000 Local $aPathesArr[$iMax_Ret_Paths+1] = [1, $sPath] While $i < $aPathesArr[0] $i += 1 $hSearch = FileFindFirstFile($aPathesArr[$i] & "\*") If $hSearch = -1 Then ContinueLoop While 1 $sFindNext = FileFindNextFile($hSearch) If @error Then ExitLoop $sFilePath = $aPathesArr[$i] & "\" & $sFindNext $iPathIsFolder = StringInStr(FileGetAttrib($sFilePath & "\"), "D") If $iMode <= 0 Or ($iMode > 0 And $iPathIsFolder) Then If $iPathIsFolder Or (Not $iPathIsFolder And StringRegExp($sFindNext, "(?i)" & $sRegExpFilter)) Then If $aPathesArr[0] >= $iMax_Ret_Paths Then $iMax_Ret_Paths *= 2 ReDim $aPathesArr[$iMax_Ret_Paths+1] EndIf $aPathesArr[0] += 1 $aPathesArr[$aPathesArr[0]] = $sFilePath EndIf EndIf WEnd FileClose($hSearch) Wend ReDim $aPathesArr[$aPathesArr[0]+1] Return $aPathesArr EndFunc |