#include <File.au3>
$sSource_Dir = @ScriptDir & '\Source'
$sDest_Dir = @ScriptDir & '\Dest'
$sSearch_Text = 'привет'
$sExtension = 'log'
$iCopy = _Search_Copy($sSource_Dir, $sDest_Dir, $sSearch_Text, $sExtension)
Switch @error
Case 0
MsgBox(64, 'Info', _
StringFormat('Найдено: %d\r\nСкопировано: %d\r\nНе обработано: %d', _
$iCopy + @extended, $iCopy, @extended))
Case 1
MsgBox(16, 'Error', 'Отсутствует папка поиска')
Case 2
MsgBox(16, 'Error', 'Для поиска указана не папка')
EndSwitch
Func _Search_Copy($s_Source_Dir, $s_Dest_Dir, $s_Search_Text, $s_Extension = 'txt')
Local $a_Files_List, $h_File, $s_Read_Text, $i_Copy, $i_No_Copy
If Not FileExists($s_Source_Dir) Then Return SetError(1, 0, -1)
If Not StringInStr(FileGetAttrib($s_Source_Dir), 'D') Then Return SetError(2, 0, -1)
If $s_Extension Then
If StringLeft($s_Extension, 1) <> '.' Then $s_Extension = '.' & $s_Extension
EndIf
$a_Files_List = _FileListToArray($s_Source_Dir, '*' & $s_Extension, 1)
If @error = 4 Then Return SetError(0, 0, 0)
For $i = 1 To $a_Files_List[0]
If Not $s_Extension Then
If StringInStr($a_Files_List[$i], '.') Then ContinueLoop
EndIf
$h_File = FileOpen($s_Source_Dir & '\' & $a_Files_List[$i])
If $h_File = -1 Then
$i_No_Copy += 1
ContinueLoop
EndIf
$s_Read_Text = FileRead($h_File)
If @error Then
FileClose($h_File)
$i_No_Copy += 1
ContinueLoop
EndIf
FileClose($h_File)
If StringInStr($s_Read_Text, $sSearch_Text) Then
If FileCopy($s_Source_Dir & '\' & $a_Files_List[$i], $s_Dest_Dir & '\' & $a_Files_List[$i], 9) Then
$i_Copy += 1
Else
$i_No_Copy += 1
EndIf
EndIf
Next
Return SetError(0, $i_No_Copy, $i_Copy)
EndFunc ;==>_Search_Copy