Renommer les EPUB à partir de leurs métadonnées

J’ai fini par récupérer près de 20 Go de fichiers EPUB libres de droits du projet Gutenberg et d’autres sites. Or, il me fallait pouvoir les renommer en faisant apparaître l’auteur suivi du titre de l’œuvre dans le nom du fichier.

J’ai eu recours au logiciel Open Source Calibre présent sur Windows, Linux et MacOS et, notamment, au programme ebook-meta.exe qui permet d’extraire les métadonnées du fichier EPUB.

Renommer les EPUB à partir de leurs métadonnées

Le script PowerShell de renommage des fichiers EPUB à partir des métadonnées

N’oubliez pas que la longueur des fichiers est limité à 255 caractères sous Windows et que certains caractères ne sont pas utilisables dans les noms de fichiers.

Clear-Host
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
#
#Récupération de la liste des fichiers
#
$path='D:\Livres\gutenberg'
Set-Location -Path $path
$files=Get-ChildItem -Path $path | Select Name|Where Name -Match '^[0-9]+\.epub$'
#
#Extraction des métadonnées
#
ForEach($file in $files)
{
    $name=$file.Name
    $name
    $AllArgs = @($name)
    $metadatas=& 'C:\Program Files (x86)\Calibre2\ebook-meta.exe' $AllArgs
    ForEach($metadata in $metadatas)
    {
        If($metadata -match '^Title[^:]+:([^$]+$)')
        {
            $title=($matches[1]).Trim()
        }
        ElseIf($metadata -match '^Author[^:]+:([^\[]+)')
        {
            $author=($matches[1]).Trim()
        }
        ElseIf($metadata -match '^Languages[^:]+:([^\[]+)')
        {
            $language=($matches[1]).trim()
        }
    }
    $old=$path+'\'+$name 
    #
    #Que les ouvrages français
    #
    If($language -Match '^fr')
    {
        #Limités à 255 caractères et débarrassés de caractères encombrant.
        $new=(($author -Replace '[\\/:\*\?<>"]')+'_'+($title -Replace '[\\/:\*\?<>"]')).SubString(0,249)+'.epub'
        Rename-Item $old $new
    }
}

PowerShell  / Formateur Powershell