Привет.
Собственно, как можно изменять и сохранять теги книг? Типа серии, автора, названия...
Насколько я понял, надо использовать библиотеку _XMLDomWrapper.au3, но я не нашел на нее документации и не смог понять, как ее использовать
Чтение тегов делает скрипт, найденный на форуме. А вот как изменить?
Собственно, как можно изменять и сохранять теги книг? Типа серии, автора, названия...
Насколько я понял, надо использовать библиотеку _XMLDomWrapper.au3, но я не нашел на нее документации и не смог понять, как ее использовать
Чтение тегов делает скрипт, найденный на форуме. А вот как изменить?
Код:
Local Const $APP_NAME = "fb2renamer"
Local Const $APP_VERSION = "0.1"
Local Const $APP_TITLE = $APP_NAME & " v" & $APP_VERSION
Local $g_oXML
Main()
Func _ReadXMLNodeText($oXMLobj, $sNode)
Local $result = $oXMLobj.SelectSingleNode($sNode)
If IsObj($result) Then
Return $result.text
Else
Return ""
EndIf
EndFunc ;==>_ReadXMLNodeText
Func _ReadXMLNodeAttrib($oXMLobj, $sNode, $sAttrib)
Local $sXPath = $sNode & "[@" & $sAttrib & "]"
Local $result = $oXMLobj.SelectSingleNode($sXPath)
If IsObj($result) Then
Return $result.getAttribute($sAttrib)
Else
Return ""
EndIf
EndFunc ;==>_ReadXMLNodeAttrib
Func _GetParentDir($sFileName)
Return StringLeft($sFileName, StringInStr($sFileName, "\", 0, -1) - 1)
EndFunc ;==>_GetParentDir
Func _GetFileName($sFileName)
Return StringTrimLeft($sFileName, StringInStr($sFileName, "\", 0, -1))
EndFunc ;==>_GetFileName
Func _GetNewName($sFile)
If $g_oXML.load($sFile) Then
Local $sLastName, $sMiddleName, $sFirstName, $sBookTitle, $sSequenseName, $sSequenseNumber
Local $oNode = $g_oXML.SelectSingleNode("//FictionBook/description/title-info")
$sLastName = _ReadXMLNodeText($oNode, "author/last-name")
$sMiddleName = _ReadXMLNodeText($oNode, "author/middde-name")
$sFirstName = _ReadXMLNodeText($oNode, "author/first-name")
$sBookTitle = _ReadXMLNodeText($oNode, "book-title")
$sSequenseName = _ReadXMLNodeAttrib($oNode, "sequence", "name")
$sSequenseNumber = _ReadXMLNodeAttrib($oNode, "sequence", "number")
; Новое имя файла:
Local $sNewFileName = "" _
& $sFirstName & " " _
& $sMiddleName& " " _
& $sLastName & " - " _
& $sSequenseName & " - " _
& ($sSequenseNumber <> "" ? " - " & $sSequenseNumber & " - " : "") & " " _
& $sBookTitle _
& ".fb2"
$sNewFileName = StringRegExpReplace($sNewFileName, "\ +", " ")
; Вынести настройку переименования в файл настроек
$sNewFileName = StringReplace($sNewFileName, " - - ", " - ")
Return $sNewFileName
Else
SetError(1) ; 1 == file not found
Return ""
EndIf
EndFunc ;==>_GetNewName
Func _PickUpNewName($sFileName)
Local $sNewName = $sFileName
Local $iCount = 1
While True
If FileExists($sNewName) Then
$sNewName = StringRegExpReplace($sNewName, " \([0-9]+\).fb2", " \(" & $iCount & "\).fb2")
If @extended = 0 Then $sNewName = StringReplace($sNewName, ".fb2", " (" & $iCount & ").fb2")
Else
ExitLoop
EndIf
$iCount += 1
WEnd
Return $sNewName
EndFunc ;==>_PickUpNewName
Func _RenameSingleFile($bTestMode, $sFileName)
Local $sOldFullName = FileGetLongName($sFileName, 1)
Local $sOldFileName = _GetFileName($sOldFullName)
Local $sFolderName = _GetParentDir($sOldFullName)
Local $sNewFileName = _GetNewName($sOldFullName)
Local $sNewFullName = _PickUpNewName($sFolderName & "\" & $sNewFileName)
$sNewFileName = _GetFileName($sNewFullName)
Local $iBtn = MsgBox(4, $APP_TITLE, "" _
& "Папка: " & @CRLF _
& $sFolderName & @CRLF & @CRLF _
& "Имя книги:" & @CRLF _
& $sOldFileName & @CRLF & @CRLF _
& "Новое имя: " & @CRLF _
& $sNewFileName & @CRLF & @CRLF _
& @CRLF _
& "Переименовать?" _
)
If $iBtn = 6 Then FileMove($sOldFullName, $sNewFullName)
EndFunc ;==>_RenameSingleFile
Func _QuitWithMessage($sMessage, $iMsgBoxCode = 0, $iExitCode = 0)
MsgBox($iMsgBoxCode, $APP_TITLE, $sMessage)
Exit $iExitCode
EndFunc ;==>_QuitWithMessage
Func Main()
$g_oXML = ObjCreate("Microsoft.XMLDOM")
If Not IsObj($g_oXML) Then _QuitWithMessage("Ошибка инициализации XML :(", 16, 1)
Local $bOptTestMode = True
$aBook = StringSplit("j:\Kattner_Sim-udostoveryaetsya.3kZ8dw.565890.fb2", '|')
For $i = 1 To $aBook[0]
Select
Case FileExists($aBook[$i])
_RenameSingleFile($bOptTestMode, $aBook[$i])
EndSelect
Next
EndFunc ;==>Main