Je vous partage un script qui m'est bien utile (bien que pour vous, il le soit peut-être moins) : un script de renommage de fichiers. Attention, il nécessite une légère connaissance des expressions régulières.
Je suis, comme ma conjointe aime à l'appeler, un "psycho-rigide", surtout en matière de nomenclature de fichiers (ma piaule est en bordel, le ménage est pas fait, mais dans mon ordinateur, tout est carré de chez carré ^^). Par exemple, pour mes fichiers de séries en copie digitale légale bien sûr, dont le nom par défaut ressemblerait à "The.mentalist.S03E21_www.copie-digitale-légale.com_720p_vost.mkv", je me sens obligé de le renommer avec ma propre nomenclature en "The Mentalist - Saison 03 - Episode 21 [HD-VoStFr].mkv"... Bref, comme vous le voyez ma vie est passionnante...
Voici donc un script qui me permet de renommer plusieurs fichiers à la fois avec mes jolies fioritures, ou les vôtres si vous le souhaitez :
► Afficher le texteRename.au3
Code : Tout sélectionner
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=Rename\Rename.ico
#AutoIt3Wrapper_outfile=Rename.exe
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Field=Nom (short)|Rename
#AutoIt3Wrapper_Res_Field=Nom (long)|Rename
#AutoIt3Wrapper_Res_Field=Version (short)|1.0
#AutoIt3Wrapper_Res_Field=Version (long)|1.0.0.0
#AutoIt3Wrapper_Res_Field=Description|Module de renommage de fichiers
#AutoIt3Wrapper_Res_Field=Type|Rename
#AutoIt3Wrapper_Res_Field=Auteur|ZDS [Equipe nAiO]
#AutoIt3Wrapper_Res_Field=Site|http://www.naio.fr
#AutoIt3Wrapper_Res_SaveSource=n
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Language=1036
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; Entête du module
Global Const _
    $MODULE_NOM = "Rename", $MODULE_AUTEUR = "ZDS", $MODULE_VERSION = "1.0", $MODULE_DIR = @ScriptDir&"\"&StringRegExpReplace(@ScriptName, "\.[^\.]+$","")
Global Const _
    $DEBUG_MODE = (FileExists("debug.txt")=1)
#Region Librairies AutoIt
; Classic
#Include <Array.au3>
#Include <Crypt.au3>
#Include <File.au3>
; Extended
#include <GuiImageList.au3>
#Include <WindowsConstants.au3>
#Include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>
#Include <GuiListView.au3>
#EndRegion
#Region Librairies nAiO
;~ #Include ".\Rename\Compilation.au3"
Func si($cond, $true, $false)
    If $cond Then Return $true
    Return $false
EndFunc
Func min($a, $b)
    Return si($a<$b,$a,$b)
EndFunc
Func max($a, $b)
    Return si($a>$b,$a,$b)
EndFunc
Func state($control, $state)
    Return BitAND(GUICtrlGetState($control),$state) = $state
EndFunc
#EndRegion
; Initialisation
Global Const $fichierCfg = $MODULE_DIR&"\"&$MODULE_NOM&".ini"
_Crypt_Startup()
#Region Préparation des paramètres
Global $dossier, $filtre, $enable_pattern_saison, $pattern_saison, $enable_pattern_episode, $pattern_episode, $pattern_remplacement, $suffixe_HD, $suffixe_VoStFr
chargerDonnees()
#EndRegion
Local $sortie = gui_Rename()
_Crypt_Shutdown()
Exit $sortie
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#Region Interface
Func gui_Rename()
    ; Interface
    Local $GUI_size[2] = [800,600], $IMG_size[2] = [24,24]
    Local $GUI = GUICreate($MODULE_NOM, $GUI_size[0], $GUI_size[1], Default, Default, 0x80800000) ; $WS_POPUP = 0x80000000 , $WS_BORDER = 0x00800000
    GUISetIcon($MODULE_DIR&"\"&$MODULE_NOM&".ico")
    TraySetIcon($MODULE_DIR&"\"&$MODULE_NOM&".ico")
    Local $Label_Titre = GUICtrlCreateLabel(WinGetTitle($GUI), 5, 5, $GUI_size[0]-70, 25, Default, 0x00100000) ; $GUI_WS_EX_PARENTDRAG = 0x00100000
    GUICtrlSetBkColor($Label_Titre, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    GUICtrlSetFont($Label_Titre, 15, 800)
    Local $Bouton_Configurer = GUICtrlCreateButton("@", $GUI_size[0]-30-30, 5, 25, 25)
    GUICtrlSetFont($Bouton_Configurer, 14, 400, 1, "Webdings")
    GUICtrlSetTip($Bouton_Configurer, "Configurer le module")
    Local $Bouton_Quitter = GUICtrlCreateButton("X", $GUI_size[0]-30, 5, 25, 25)
    GUICtrlSetFont($Bouton_Quitter, Default, 800)
    GUICtrlSetTip($Bouton_Quitter, "Quitter le module")
    Local $Label_Separateur1 = GUICtrlCreateLabel("", 5, 35-1, $GUI_size[0]-10, 1)
    GUICtrlSetBkColor($Label_Separateur1, 0x000000)
    ; Ligne n°1
    Local $Label_Intitule = GUICtrlCreateLabel("Dossier à renommer", 5, 40+3, 120, 20)
    GUICtrlSetBkColor($Label_Intitule, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    Local $Label_DeuxPoints = GUICtrlCreateLabel(":", 125, 40+3, 10, 20)
    GUICtrlSetBkColor($Label_DeuxPoints, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    Local $Bouton_Dossier = GUICtrlCreateButton($dossier, 135, 40-1, $GUI_size[0]-140-105-105, 22)
    GUICtrlSetTip($Bouton_Dossier, "Choisir un dossier à scanner")
    ; Ligne n°1 : Filtre
    Local $Input_Filtre = GUICtrlCreateInput($filtre, $GUI_size[0]-105-105, 40-1, 100, 22)
    GUICtrlSetTip($Input_Filtre, "Choisir un filtre à appliquer sur le dossier à scanner")
    ; Ligne n°2
    Local $Label_Intitule = GUICtrlCreateLabel("RegExp de la saison", 5, 65+3, 120, 20)
    GUICtrlSetBkColor($Label_Intitule, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    Local $Label_DeuxPoints = GUICtrlCreateLabel(":", 125, 65+3, 10, 20)
    GUICtrlSetBkColor($Label_DeuxPoints, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    Local $Checkbox_EnablePatternSaison = GUICtrlCreateCheckbox("", 135, 65, 15, 20)
    GUICtrlSetBkColor($Checkbox_EnablePatternSaison, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    GUICtrlSetState($Checkbox_EnablePatternSaison, si($enable_pattern_saison, $GUI_CHECKED, $GUI_UNCHECKED))
    GUICtrlSetTip($Checkbox_EnablePatternSaison, "Sélectionner pour pouvoir isoler un numéro de saison")
    Local $Input_PatternSaison  = GUICtrlCreateInput($pattern_saison,  155, 65-1, $GUI_size[0]-140-105-20, 22)
    GUICtrlSetTip($Input_PatternSaison, "Choisir une RegExp pour la selection de la saison")
    ; Ligne n°3
    Local $Label_Intitule = GUICtrlCreateLabel("RegExp de l'épisode", 5, 90+3, 120, 20)
    GUICtrlSetBkColor($Label_Intitule, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    Local $Label_DeuxPoints = GUICtrlCreateLabel(":", 125, 90+3, 10, 20)
    GUICtrlSetBkColor($Label_DeuxPoints, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    Local $Checkbox_EnablePatternEpisode = GUICtrlCreateCheckbox("", 135, 90, 15, 20)
    GUICtrlSetBkColor($Checkbox_EnablePatternEpisode, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    GUICtrlSetState($Checkbox_EnablePatternEpisode, si($enable_pattern_episode, $GUI_CHECKED, $GUI_UNCHECKED))
    GUICtrlSetTip($Checkbox_EnablePatternEpisode, "Sélectionner pour pouvoir isoler un numéro d'épisode")
    Local $Input_PatternEpisode = GUICtrlCreateInput($pattern_episode, 155, 90-1, $GUI_size[0]-140-105-20, 22)
    GUICtrlSetTip($Input_PatternEpisode, "Choisir une RegExp pour la selection de l'épisode")
    ; Ligne n°4
    Local $Label_Intitule = GUICtrlCreateLabel("Pattern de remplacement", 5, 115+3, 120, 20)
    GUICtrlSetBkColor($Label_Intitule, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    Local $Label_DeuxPoints = GUICtrlCreateLabel(":", 125, 115+3, 10, 20)
    GUICtrlSetBkColor($Label_DeuxPoints, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    Local $Input_PatternRemplacement = GUICtrlCreateInput($pattern_remplacement, 135, 115-1, $GUI_size[0]-140-105-105, 22)
    GUICtrlSetTip($Input_PatternRemplacement, "Choisir un modèle pour le nom du fichier"&@CRLF&@CRLF&"%sX% : Numéro de la saison tronqué à X caractères"&@CRLF&"%eX% : Numéro de l'épisode tronqué à X caractères"&@CRLF&"(si non renseigné, X=2)")
    ; Ligne n°4 : Checkbox
    Local $Checkbox_HD = GUICtrlCreateCheckbox("HD", $GUI_size[0]-105-105, 115-1, 35, 22)
    GUICtrlSetBkColor($Checkbox_HD, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    GUICtrlSetState($Checkbox_HD, si($suffixe_HD, $GUI_CHECKED, $GUI_UNCHECKED))
    GUICtrlSetTip($Checkbox_HD, "Sélectionner si le fichier est en Haute-Définition")
    Local $Checkbox_VoStFr = GUICtrlCreateCheckbox("VoStFr", $GUI_size[0]-60-105, 115-1, 55, 22)
    GUICtrlSetBkColor($Checkbox_VoStFr, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2
    GUICtrlSetState($Checkbox_VoStFr, si($suffixe_VoStFr, $GUI_CHECKED, $GUI_UNCHECKED))
    GUICtrlSetTip($Checkbox_VoStFr, "Sélectionner si le fichier est en VO soustitrée en français")
    ; Boutons
    Local $Bouton_Scanner  = GUICtrlCreateButton("Scan", $GUI_size[0]-105, 40, 100, 45)
    GUICtrlSetState($Bouton_Scanner, si(FileExists($dossier),$GUI_ENABLE,$GUI_DISABLE))
    GUICtrlSetTip($Bouton_Scanner, "Lancer la procédure de scan du dossier")
    Global $Bouton_Renommer  = GUICtrlCreateButton("Renommer", $GUI_size[0]-105, 90, 100, 45)
    GUICtrlSetState($Bouton_Renommer, $GUI_DISABLE)
    GUICtrlSetTip($Bouton_Renommer, "Lancer la procédure de renommage des fichiers")
    Local $Label_Separateur2 = GUICtrlCreateLabel("", 5, 140-1, $GUI_size[0]-10, 1)
    GUICtrlSetBkColor($Label_Separateur2, 0x000000)
    ; Liste de valeurs à afficher
    Global $Listview_Fichiers = GuiCtrlCreateListView("|Nom du fichier|S|E|Nom du fichier renommé", 5, 145, $GUI_size[0]-10, $GUI_size[1]-145-25-5, BitOR($WS_EX_CLIENTEDGE, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT))
    GUICtrlSetTip($Bouton_Renommer, "Cocher les fichiers à renommer")
    ; Tailles des colonnes
    _GUICtrlListView_SetColumnWidth($Listview_Fichiers,   0, 22)
    _GUICtrlListView_SetColumnWidth($Listview_Fichiers,   1, 300)
    _GUICtrlListView_SetColumnWidth($Listview_Fichiers,   2, 30)
    _GUICtrlListView_SetColumnWidth($Listview_Fichiers,   3, 30)
    _GUICtrlListView_SetColumnWidth($Listview_Fichiers,   4, $GUI_size[0]-10-22-300-30-30-20)
    ; Progression
    Global $Label_Infos       = GUICtrlCreateLabel("", 5, $GUI_size[1]-25+2, $GUI_size[0]-300-15, 20)
    GUICtrlSetBkColor($Label_Infos, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont($Label_Infos, 10)
    Global $ProgressBar_Infos = GUICtrlCreateProgress($GUI_size[0]-300-5,$GUI_size[1]-25, 300, 20)
    ; Traitement
    GUISetState()
    _GUICtrlListView_RegisterSortCallBack($Listview_Fichiers)
    GUIRegisterMsg($WM_NOTIFY, "notify")
    Local $stop = False, $count = 0, $Lancer_Scanner = False, $Lancer_Renommer = False, $previous_patterns = ""
    While Not $stop
        $msg = GUIGetMsg()
        Switch $msg
        Case -3, $Bouton_Quitter ; $GUI_EVENT_CLOSE = -3
            $stop = True
        Case $Bouton_Configurer
            GUISetState(@SW_HIDE, $GUI)
            ; Création de la fenêtre
            Local $GUICONFIG = GUICreate($MODULE_NOM&" v"&$MODULE_VERSION, 300, 250, Default, Default, 0x80800000) ; $WS_POPUP = 0x80000000 , $WS_BORDER = 0x00800000
            GUISetIcon($MODULE_DIR&"\"&$MODULE_NOM&".ico", Default, $GUICONFIG)
            ; Déclaration des éléments graphiques
            Local $GUICONFIG_TITRE = GUICtrlCreateLabel($MODULE_NOM&" : Configuration", 5, 5, 230, 25, Default, 0x00100000) ; $GUI_WS_EX_PARENTDRAG = 0x00100000
            GUICtrlSetBkColor($GUICONFIG_TITRE, $GUI_BKCOLOR_TRANSPARENT)
            GUICtrlSetFont($GUICONFIG_TITRE, 15, 800)
            GUICtrlSetResizing($GUICONFIG_TITRE, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKRIGHT+$GUI_DOCKHEIGHT)
            Local $GUICONFIG_QUITTER = GUICtrlCreateButton("û", 270, 5, 25, 25)
            GUICtrlSetFont($GUICONFIG_QUITTER, 18, 400, 1, "Wingdings")
            GUICtrlSetTip($GUICONFIG_QUITTER, "Quitter la configuration")
            GUICtrlSetResizing($GUICONFIG_QUITTER, $GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
            Local $GUICONFIG_SEPARATEUR = GUICtrlCreateLabel("", 5, 34, 290, 1)
            GUICtrlSetBkColor($GUICONFIG_SEPARATEUR, 0x000000)
            GUICtrlSetResizing($GUICONFIG_SEPARATEUR, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKRIGHT+$GUI_DOCKHEIGHT)
            Local $GUICONFIG_DONNEES = GUICtrlCreateEdit("", 5, 40, 290, 205)
            GUICtrlSetData($GUICONFIG_DONNEES, getDonnees())
            GUICtrlSetFont($GUICONFIG_DONNEES, Default, Default, Default, "Courier New")
            GUICtrlSetTip($GUICONFIG_DONNEES, "Données structurées au format INI pour"&@CRLF&"la configuration du module '"&$MODULE_NOM&"'."&@CRLF&"(Attention : réservé aux connaisseurs)", "Données de configuration")
            GUICtrlSetResizing($GUICONFIG_DONNEES, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM)
            ; Démarrage de l'affichage
            GUISetState(@SW_SHOW, $GUICONFIG)
            ; Traitement
            Local $config_stop = False
            While Not $config_stop
                Local $config_msg = GUIGetMsg()
                Switch $config_msg
                Case $GUI_EVENT_CLOSE, $GUICONFIG_QUITTER
                    Local $flux = FileOpen($fichierCfg,10)
                    If @error = 0 Then
                        FileWrite($flux, GUICtrlRead($GUICONFIG_DONNEES))
                        FileClose($flux)
                        chargerDonnees()
                        $config_stop = True
                    EndIf
                Case Else
                    ; Rien
                EndSwitch
            WEnd
            GUISetState(@SW_HIDE, $GUICONFIG)
            GUIDelete($GUICONFIG)
            Local $reponse = MsgBox(4, $MODULE_NOM, "Relancer le scan?")
            ; Finalisation
            GUISetState(@SW_SHOW, $GUI)
            GUICtrlSetData($Bouton_Dossier, $dossier)
            GUICtrlSetData($Input_Filtre, $filtre)
            GUICtrlSetState($Checkbox_EnablePatternSaison, si($enable_pattern_saison, $GUI_CHECKED, $GUI_UNCHECKED))
            GUICtrlSetData($Input_PatternSaison, $pattern_saison)
            GUICtrlSetState($Checkbox_EnablePatternEpisode, si($enable_pattern_episode, $GUI_CHECKED, $GUI_UNCHECKED))
            GUICtrlSetData($Input_PatternEpisode, $pattern_episode)
            GUICtrlSetData($Input_PatternRemplacement, $pattern_remplacement)
            GUICtrlSetState($Bouton_Scanner, si(FileExists($dossier), $GUI_ENABLE, $GUI_DISABLE))
            $Lancer_Scanner = ($reponse = 6)
        Case $Bouton_Dossier
            Local $folder = FileSelectFolder("Choisissez un dossier :", "", Default, @ScriptDir, $GUI)
            If Not @error Then
                If FileExists($folder) Then
                    $dossier = $folder
                    GUICtrlSetData($Bouton_Dossier, $folder)
                    GUICtrlSetState($Bouton_Scanner, si(FileExists(GUICtrlRead($Bouton_Dossier)), $GUI_ENABLE, $GUI_DISABLE))
                Else
                    MsgBox(0, $MODULE_NOM, "Dossier choisi incorrect", 10, $GUI)
                EndIf
            EndIf
        Case $Bouton_Scanner
            $Lancer_Scanner = True
        Case $Bouton_Renommer
            $Lancer_Renommer = True
        Case Else
            ; Scanner
            If $Lancer_Scanner = True Then
                $Lancer_Scanner = False
                Local $lock = _GUICtrlListView_BeginUpdate($Listview_Fichiers)
                If $lock Then
                    If Not FileExists($dossier) Then
                        MsgBox(64, $MODULE_NOM, "Dossier introuvable", 30, $GUI)
                    Else
                        GUICtrlSetData($ProgressBar_Infos, 0)
                        _GUICtrlListView_DeleteAllItems($Listview_Fichiers)
                        Local $vide[1] = [0], $liste = _FileListToArray($dossier, $filtre, 1)
                        If @error Then $liste = $vide
                        For $i = 1 To $liste[0]
                            addToListView($Listview_Fichiers, $liste[$i])
                            GUICtrlSetData($ProgressBar_Infos, 100*($i-0.5)/$liste[0])
                        Next
                        GUICtrlSetData($Label_Infos, "Scan effectué : "&$liste[0]&" fichier"&si($liste[0]>1,"s",""))
                        If $liste[0] = 0 Then
                            GUICtrlSetData($ProgressBar_Infos, 0)
                            MsgBox(64, $MODULE_NOM, "Aucun fichier", 30, $GUI)
                        Else
                            GUICtrlSetData($ProgressBar_Infos, 100)
                        EndIf
                        $previous_patterns = ""
                    EndIf
                EndIf
                _GUICtrlListView_EndUpdate($Listview_Fichiers)
            EndIf
            ; Renommer
            If $Lancer_Renommer = True Then
                $Lancer_Renommer = False
                Local $lock = _GUICtrlListView_BeginUpdate($Listview_Fichiers), $liste[1][2] = [[0]]
                If $lock Then
                    GUICtrlSetData($ProgressBar_Infos, 0)
                    For $i = 0 To _GUICtrlListView_GetItemCount($Listview_Fichiers)-1
                        Local $check = _GUICtrlListView_GetItemChecked($Listview_Fichiers, $i), $filename_in = _GUICtrlListView_GetItemText($Listview_Fichiers, $i, 1), $filename_out = _GUICtrlListView_GetItemText($Listview_Fichiers, $i, 4)
                        If $check And $filename_in <> $filename_out Then
                            $liste[0][0] = $liste[0][0]+1
                            ReDim $liste[$liste[0][0]+1][2]
                            $liste[$liste[0][0]][0] = $dossier&"\"&$filename_in
                            $liste[$liste[0][0]][1] = $dossier&"\"&$filename_out
                        EndIf
                    Next
                    If $liste[0][0] > 0 Then
                        Local $reponse = MsgBox(262144+256+48+4, $MODULE_NOM&" v"&$MODULE_VERSION, "Nombre d'éléments à renommer : " & $liste[0][0] & @CRLF & @CRLF & "Confirmer la procédure ?", 30, $GUI), $ok = 0
                        If $reponse = 6 Then
                            For $i = 1 To $liste[0][0]
                                $ok += FileMove($liste[$i][0],$liste[$i][1])
                                GUICtrlSetData($ProgressBar_Infos, 100*($i-0.5)/$liste[0][0])
                            Next
                            GUICtrlSetData($ProgressBar_Infos, 100)
                            If $ok <> $liste[0][0] Then
                                MsgBox(262144+16, $MODULE_NOM&" v"&$MODULE_VERSION, "Erreur lors de la procédure")
                            EndIf
                        EndIf
                    Else
                        MsgBox(262144+16, $MODULE_NOM&" v"&$MODULE_VERSION, "Aucun élément à renommer")
                    EndIf
                EndIf
                _GUICtrlListView_EndUpdate($Listview_Fichiers)
            EndIf
            ; Modification des valeurs
            If $filtre <> GUICtrlRead($Input_Filtre) Then $filtre = GUICtrlRead($Input_Filtre)
            ; Modification importante des valeurs
            If $enable_pattern_saison <> GUICtrlIsState($Checkbox_EnablePatternSaison, $GUI_CHECKED, True) Then $enable_pattern_saison = GUICtrlIsState($Checkbox_EnablePatternSaison, $GUI_CHECKED, True)
            If $pattern_saison <> GUICtrlRead($Input_PatternSaison) Then $pattern_saison = GUICtrlRead($Input_PatternSaison)
            If $enable_pattern_episode <> GUICtrlIsState($Checkbox_EnablePatternEpisode, $GUI_CHECKED, True) Then $enable_pattern_episode = GUICtrlIsState($Checkbox_EnablePatternEpisode, $GUI_CHECKED, True)
            If $pattern_episode <> GUICtrlRead($Input_PatternEpisode) Then $pattern_episode = GUICtrlRead($Input_PatternEpisode)
            If $pattern_remplacement <> GUICtrlRead($Input_PatternRemplacement) Then $pattern_remplacement = GUICtrlRead($Input_PatternRemplacement)
            If $suffixe_HD <> GUICtrlIsState($Checkbox_HD, $GUI_CHECKED, True) Then $suffixe_HD = GUICtrlIsState($Checkbox_HD, $GUI_CHECKED, True)
            If $suffixe_VoStFr <> GUICtrlIsState($Checkbox_VoStFr, $GUI_CHECKED, True) Then $suffixe_VoStFr = GUICtrlIsState($Checkbox_VoStFr, $GUI_CHECKED, True)
            If $previous_patterns <> $enable_pattern_saison&"#"&$pattern_saison&"#"&$enable_pattern_episode&"#"&$pattern_episode&"#"&$pattern_remplacement&"#"&$suffixe_HD&"#"&$suffixe_VoStFr Then
                $previous_patterns = $enable_pattern_saison&"#"&$pattern_saison&"#"&$enable_pattern_episode&"#"&$pattern_episode&"#"&$pattern_remplacement&"#"&$suffixe_HD&"#"&$suffixe_VoStFr
                GUICtrlSetState($Input_PatternSaison, si($enable_pattern_saison, $GUI_ENABLE, $GUI_DISABLE))
                GUICtrlSetState($Input_PatternEpisode, si($enable_pattern_episode, $GUI_ENABLE, $GUI_DISABLE))
                Local $lock = _GUICtrlListView_BeginUpdate($Listview_Fichiers)
                If $lock Then
                    For $i = 0 To _GUICtrlListView_GetItemCount($Listview_Fichiers)-1
                        Local $filename = _GUICtrlListView_GetItemText($Listview_Fichiers, $i, 1)
                        Local $n_saison = StringRegExp($filename, $pattern_saison, 3)
                        If @error Or Not IsDeclared("n_saison") Or Not IsArray($n_saison) Then
                            $n_saison = "?"
                        Else
                            $n_saison = $n_saison[0]
                        EndIf
                        _GUICtrlListView_SetItemText($Listview_Fichiers, $i, $n_saison, 2)
                        Local $n_episode = StringRegExp($filename, $pattern_episode, 3)
                        If @error Or Not IsDeclared("n_episode") Or Not IsArray($n_episode) Then
                            $n_episode = "?"
                        Else
                            $n_episode = $n_episode[0]
                        EndIf
                        Local $extension = StringRegExp($filename, "\.([^\.]+)$", 3)
                        If @error Or Not IsDeclared("extension") Or Not IsArray($extension) Then
                            $extension = "?"
                        Else
                            $extension = $extension[0]
                        EndIf
                        _GUICtrlListView_SetItemText($Listview_Fichiers, $i, $n_episode, 3)
                        Local $state = (Not $enable_pattern_saison Or $n_saison <> "?") And (Not $enable_pattern_episode Or $n_episode <> "?") And $extension <> "?"
                        _GUICtrlListView_SetItemChecked($Listview_Fichiers, $i, $state)
                        If $state Then
                            Local $renamed_filename = StringReplace(StringReplace($pattern_remplacement, "%s%", StringRight("0"&$n_saison,2)), "%e%", StringRight("0"&$n_episode,2))
                            For $j = 1 To 4
                                $renamed_filename = StringReplace(StringReplace($renamed_filename, "%s"&$j&"%", StringRight("000"&$n_saison,$j)), "%e"&$j&"%", StringRight("000"&$n_episode,$j))
                            Next
                            Local $suffixe = ""
                            If $suffixe_HD And $suffixe_VoStFr Then
                                $suffixe = " [HD-VoStFr]"
                            ElseIf $suffixe_HD Then
                                $suffixe = " [HD]"
                            ElseIf $suffixe_VoStFr Then
                                $suffixe = " [VoStFr]"
                            EndIf
                            $renamed_filename = $renamed_filename&$suffixe&"."&$extension
                            _GUICtrlListView_SetItemText($Listview_Fichiers, $i, $renamed_filename, 4)
                        Else
                            _GUICtrlListView_SetItemText($Listview_Fichiers, $i, $filename, 4)
                        EndIf
                    Next
                EndIf
                _GUICtrlListView_EndUpdate($Listview_Fichiers)
            EndIf
        EndSwitch
    WEnd
    GUIRegisterMsg($WM_NOTIFY, "")
    _GUICtrlListView_UnRegisterSortCallBack($Listview_Fichiers)
    sauvegarder()
    GUIDelete($GUI)
    Return 0
EndFunc
#EndRegion
Func sauvegarder()
    If Not FileExists($fichierCfg) Then
        Local $flux = FileOpen($fichierCfg, 10)
        If Not @error Then FileClose($flux)
    EndIf
    IniWrite($fichierCfg, $MODULE_NOM, "Dossier",                $dossier)
    IniWrite($fichierCfg, $MODULE_NOM, "Filtre",                 $filtre)
    IniWrite($fichierCfg, $MODULE_NOM, "Enable_Pattern_Saison",  si($enable_pattern_saison,  "Y", "N"))
    IniWrite($fichierCfg, $MODULE_NOM, "Pattern_Saison",         $pattern_saison)
    IniWrite($fichierCfg, $MODULE_NOM, "Enable_Pattern_Episode", si($enable_pattern_episode, "Y", "N"))
    IniWrite($fichierCfg, $MODULE_NOM, "Pattern_Episode",        $pattern_episode)
    IniWrite($fichierCfg, $MODULE_NOM, "Pattern_Remplacement",   $pattern_remplacement)
    IniWrite($fichierCfg, $MODULE_NOM, "Suffixe_HD",             si($suffixe_HD,     "Y", "N"))
    IniWrite($fichierCfg, $MODULE_NOM, "Suffixe_VoStFr",         si($suffixe_VoStFr, "Y", "N"))
EndFunc
Func getDonnees()
    Local $resultat = "", $sections = IniReadSectionNames($fichierCfg)
    If Not @error And $sections[0] > 0 Then
        For $i = 1 To $sections[0]
            $resultat = $resultat & @CRLF & @CRLF & "["&$sections[$i]&"]"
            Local $values = IniReadSection($fichierCfg,$sections[$i])
            If Not @error And $values[0][0] > 0 Then
                For $j = 1 To $values[0][0]
                    $resultat = $resultat & @CRLF & $values[$j][0]&"="&$values[$j][1]
                Next
            EndIf
        Next
    EndIf
    Return StringStripWS($resultat,3)
EndFunc
Func chargerDonnees()
    $dossier                = IniRead($fichierCfg, $MODULE_NOM, "Dossier",                @ScriptDir)
    $filtre                 = IniRead($fichierCfg, $MODULE_NOM, "Filtre",                 "*.avi")
    $enable_pattern_saison  = IniRead($fichierCfg, $MODULE_NOM, "Enable_Pattern_Saison",  "N") <> "N"
    $pattern_saison         = IniRead($fichierCfg, $MODULE_NOM, "Pattern_Saison",         "(?i)s(\d+)")
    $enable_pattern_episode = IniRead($fichierCfg, $MODULE_NOM, "Enable_Pattern_Episode", "N") <> "N"
    $pattern_episode        = IniRead($fichierCfg, $MODULE_NOM, "Pattern_Episode",        "(?i)e(\d+)")
    $pattern_remplacement   = IniRead($fichierCfg, $MODULE_NOM, "Pattern_Remplacement",   "Nom - Saison %s% - Episode %e%")
    $suffixe_HD             = IniRead($fichierCfg, $MODULE_NOM, "Suffixe_HD",             "N") <> "N"
    $suffixe_VoStFr         = IniRead($fichierCfg, $MODULE_NOM, "Suffixe_VoStFr",         "N") <> "N"
EndFunc
Func addToListView($listview, $filename)
    Local $n = _GUICtrlListView_GetItemCount($listview)
    Local $item = GUICtrlCreateListViewItem($n&"|"&$filename&"|"&"?"&"|"&"?"&"|"&$filename, $listview)
EndFunc
Func notify($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $structure = DllStructCreate($tagNMHEADER, $lParam)
    If (HWnd(DllStructGetData($structure, "hWndFrom")) = GUICtrlGetHandle($Listview_Fichiers)) Then
        Switch DllStructGetData($structure, "Code")
            Case $LVN_COLUMNCLICK ; Clic sur colonne
                Local $lock = _GUICtrlListView_BeginUpdate($Listview_Fichiers)
                If $lock Then
                    GUICtrlSetState($Bouton_Renommer, $GUI_DISABLE)
                    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
                    If _GUICtrlListView_GetItemCount($Listview_Fichiers) = 0 Then
                        ; Aucun fichier
                    ElseIf DllStructGetData($tInfo, "SubItem") > 0 Then
                        _GUICtrlListView_SortItems(GUICtrlGetHandle($Listview_Fichiers), DllStructGetData($tInfo, "SubItem"))
                    Else
                        For $i = 0 To _GUICtrlListView_GetItemCount($Listview_Fichiers)-1
                            Local $state = _GUICtrlListView_GetItemChecked($Listview_Fichiers, $i)
                            _GUICtrlListView_SetItemChecked($Listview_Fichiers, $i, Not $state)
                            If Not $state Then GUICtrlSetState($Bouton_Renommer, $GUI_ENABLE)
                        Next
                    EndIf
                EndIf
                _GUICtrlListView_EndUpdate($Listview_Fichiers)
            Case $HDN_BEGINTRACKW ; Colonne redimensionnée
                Local $column = DllStructGetData($structure, "Item"), $blocked = "023"
                Return StringInStr($blocked, $column)
            Case $LVN_ITEMCHANGED
                Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam), $index = DllStructGetData($tInfo, "Item")
                _GUICtrlListView_SetItemSelected($Listview_Fichiers, $index, False)
                GUICtrlSetState($Bouton_Renommer, $GUI_DISABLE)
                For $i = 0 To _GUICtrlListView_GetItemCount($Listview_Fichiers)-1
                    If _GUICtrlListView_GetItemChecked($Listview_Fichiers, $i) Then GUICtrlSetState($Bouton_Renommer, $GUI_ENABLE)
                Next
        EndSwitch
    EndIf
    Return $__LISTVIEWCONSTANT_GUI_RUNDEFMSG
EndFunc
Func sousmenu($handle, $context, $target = 0)
    If @NumParams = 2 Or $target = 0 Then
        DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", GUICtrlGetHandle($context), "int", 0, "int", MouseGetPos(0), "int", MouseGetPos(1), "hwnd", $handle, "ptr", 0)
    Else
        Local $position = ControlGetPos($handle, "", $target), $coords = DllStructCreate("int;int")
        DllStructSetData($coords, 1, $position[0]+10)
        DllStructSetData($coords, 2, $position[1]+10)
        DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $handle, "ptr", DllStructGetPtr($coords))
        DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", GUICtrlGetHandle($context), "int", 0, "int", DllStructGetData($coords, 1), "int", DllStructGetData($coords, 2), "hwnd", $handle, "ptr", 0)
    EndIf
EndFunc
Func GUICtrlIsState($control, $state, $read = False)
    If $read Then
        Return BitAND(GUICtrlRead($control), $state) = $state
    Else
        Return BitAND(GUICtrlGetState($control), $state) = $state
    EndIf
EndFunc- Lancer le script
 - Cliquez sur le bouton "Dossier à traiter", et choisissez le dossier de vos fichiers à la nomenclature douteuse
 - Remplissez ensuite le filtre pour ne garder que les fichiers que vous voulez traiter (par exemple les fichiers MKV "*.mkv")
 - Cliquez sur "Scan" pour récupérer la liste des fichiers présents
 - Cliquez sur la case "Regexp de la saison" pour pouvoir remplir le champ ci-contre avec la regexp pour récupérer le numéro de la saison (exemple avec le nom ci-dessus "S(\d\d)" pour prendre les deux chiffres qui suivent le S majuscule)
 - Cliquez sur la case "Regexp de l'épisode" pour pouvoir remplir le champ ci-contre avec la regexp pour récupérer le numéro de l'épisode (exemple avec le nom ci-dessus "E(\d\d)" pour prendre les deux chiffres qui suivent le E majuscule)
 - Remplissez le pattern de remplacement avec votre propre nomenclature et les symboles prévus %sX% et %eX% (exemple avec le nom ci dessus "The Mentalist - Saison %s2% - Episode %e2%")
 - Cochez ensuite les cases HD et VoStFr si le fichier correspond à de la Haute-Définition ou de la version originale soustitrée en français
 - Cochez enfin les fichiers où vous voulez appliquer la procédure de renommage
 - Cliquez sur "Renommer", et voila !
 
A bientôt !
EDIT : Petit tuyau en passant, comme dans beaucoup de mes scripts à base de listview, un clic sur l'entête de la première colonne permet d'inverser la sélection. Quand on a plein de fichiers à sélectionner sauf deux ou trois, c'est pratique.




