#include <File.au3>
#include <Word.au3>
#include <WinAPIShPath.au3>
Global $sTitle, $sFileSelectFolder, $strs, $files, $sExten, $sExten, $oDoc, $oRangeFound, $oWord, $aFileError[1][3]
$sFileSelectFolder = FileSelectFolder("Выберете папку с файлами", @ScriptDir)
If Not $sFileSelectFolder Then Exit
$files = _FileListToArray($sFileSelectFolder, "*.doc*", 1)
$oWord = _Word_Create(False)
For $i = 1 To UBound($files) - 1
$sTitle = ''
$sExten = _WinAPI_PathFindExtension($files[$i])
$oDoc = _Word_DocOpen($oWord, $sFileSelectFolder & '\' & $files[$i], Default, Default, True)
If @error Then
_FileError($sFileSelectFolder & '\' & $files[$i], 1)
ContinueLoop
EndIf
$oRangeFound = _Word_DocRangeSet($oDoc, -1, $wdParagraph, -1, Default, 100) ;на случай форматирования пробелами и переводами строки берем первые несколько строк
If @error Then
_FileError($sFileSelectFolder & '\' & $files[$i], 2)
_Word_DocClose($oDoc)
ContinueLoop
EndIf
$strs = $oRangeFound.Text
$strs = StringRegExp($strs, "(.*)\R", 3)
For $str In $strs
If StringLen($str) > 10 Then ;ищем первую строку, которая будет длиннее 10 символов и используем её в качестве имени нового файла
$sTitle = $str
ExitLoop
EndIf
Next
_Word_DocClose($oDoc)
If Not $sTitle Then
_FileError($sFileSelectFolder & '\' & $files[$i], 3)
ContinueLoop
EndIf
$sTitle = StringRegExpReplace($sTitle, '[\\/:*?"<>|]', '_')
$sFileNew = _WinAPI_PathYetAnotherMakeUniqueName($sFileSelectFolder & "\" & $sTitle & $sExten)
If Not $sFileNew Then
_FileError($sFileSelectFolder & '\' & $files[$i], 4)
ContinueLoop
EndIf
If $sFileNew And (Not FileMove($sFileSelectFolder & "\" & $files[$i], $sFileNew, 1)) Then _FileError($sFileSelectFolder & '\' & $files[$i], 5)
Next
_Word_Quit($oWord)
If $aFileError[0][0] Then
_ArrayDisplay($aFileError, 'Процесс Завершен. Ошибки:', '1:' & $aFileError[0][0], Default, Default, 'Файл|Код Ошибки|Пояснения')
Else
MsgBox(262144 + 64, Default, 'Процесс Успешно Завершен.')
EndIf
; === USER FUNCTIONS: =========================================
Func _FileError($sFile, $iErrorCode)
Local $iUb = UBound($aFileError)
ReDim $aFileError[$iUb + 1][3]
$aFileError[0][0] = $iUb
$aFileError[$iUb][0] = '".\' & $sFile & '"'
$aFileError[$iUb][1] = $iErrorCode
Switch $iErrorCode
Case 1
$aFileError[$iUb][2] = 'Не удалось открыть файл для чтения'
Case 2
$aFileError[$iUb][2] = 'Не удалось выделить текст в документе'
Case 3, 4
$aFileError[$iUb][2] = 'Не удалось сгенерировать новое имя документа'
Case 5
$aFileError[$iUb][2] = 'Не удалось переименовать документ'
EndSwitch
EndFunc ;==>_FileError