#include<FileOperations.au3>
#include <Array.au3>
$aFileList = _FindCopy(@AutoItExe)
Switch @error
Case 0
$sText = 'Найдено ' & $aFileList[0] & ' файлов дубликатов'
Case 1
$sText = 'Диски не найдены'
Case 2
$sText = 'Файлы не найдены'
Case 3
$sText = 'Одинаковые по размеру файлы не найдены'
Case 4
$sText = 'Дубликаты не найдены'
EndSwitch
MsgBox(0, 'Сообщение', $sText)
_ArrayDisplay($aFileList, 'Дубликаты')
Func _FindCopy($sPathFile)
Local $aDrive, $iFileSize, $j, $sText1, $tmp, $vFileList
$aDrive = DriveGetDrive('ALL')
If @error Then Return SetError(1, 0, 0)
$iFileSize = FileGetSize($sPathFile) ; получаем размер файла, который ищем
$vFileList = ''
For $i = 1 To $aDrive[0]
; Маску можно указать "*.exe", для теста вместо 125 вписать 0, чтобы быстро найти только в корне дисков.
$tmp = _FO_FileSearch($aDrive[$i], "*", True, 125, 1, 0) ; получаем список файлов диска.
If Not @error Then $vFileList &= $tmp & @CRLF
Next
$vFileList = StringReplace($vFileList, $sPathFile & @CRLF, '') ; исключаем искомый файл из списка
If Not $vFileList Then Return SetError(2, 0, 0) ; Если список пуст, то вылет из функции
$vFileList = StringSplit(StringTrimRight($vFileList, 2), @CRLF, 1) ; список преобразуется в массив
$j = 0
For $i = 1 To $vFileList[0]
$tmp = FileGetSize($vFileList[$i]) ; получаем размер файла в списке
If $tmp = $iFileSize Then ; если совпадает с оригиналом, тогда
$j += 1
$vFileList[$j] = $vFileList[$i] ; записываем в массив
EndIf
Next
If $i Then
ReDim $vFileList[$j + 1]
$vFileList[0] = $j
Else
Return SetError(3, 0, 0) ; не найдено одинаковых размеров файлов
EndIf
$j = 0
$sText1 = FileRead($sPathFile) ; читаем оригинал
For $i = 1 To $vFileList[0]
$tmp = FileRead($vFileList[$i]) ; читаем файл в списке
If $sText1 == $tmp Then ; если содержимое одинаково
$j += 1 ; увеличиваем счётчик
$vFileList[$j] = $vFileList[$i] ; записываем в массив
; или делаем что-то ещё
EndIf
Next
If $i Then
ReDim $vFileList[$j + 1]
$vFileList[0] = $j
Return SetError(0, $j, $vFileList)
Else
Return SetError(4, 0, 0) ; не найдено дубликатов
EndIf
EndFunc ;==>_FindCopy