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.