Tout simplement, ce programme demande via la fonction FileOpenDialog quels sont les fichiers à modifier, il est possible d'en sélectionner plusieurs avec la touche CTRL. Ces fichier sont mis dans un tableau et traités un par un. Le renommage s'effectue en fonction de la date de création du fichier et ne s'opère plus si le fichier possède déjà ces caractéristiques (on ne peut pas renommer un fichier déjà sous cette forme : "Année.mois.jour.nom du fichier.extension")
lorsque le programme a fini sa boucle un message propose à l'utilisateur de continuer (tous les fichiers ne sont peut-être pas dans le même dossier) ou quitte.
Je me suis rendu compte en testant que la mise en forme de l'array d'une sélection simple était différente d'une array de sélection multiple, il a donc fallu créer un contrôle à ce niveau et utiliser la fonction _PathSplit pour mettre en mémoire le chemin du fichier, chose qui n'est pas necessaire dans une sélection multiple puisque le chemin du fichier est splité dans l'array
Le code :
#include <Array.au3>
#include <File.au3>
#include <Date.au3>
#include <FileConstants.au3>
GLOBAL $version = 0.2
$msg=msgbox(4,"RENOME DATE","Ce programme permet de renommer les fichier sélectionnés dans le dossier de son choix avec la date de modification" & @crlf & "Le renommage est comme suit : AAAA.MM.JJ.fichier.ext " & " (les fichier déjà nommés ne seront pas traités)" & @crlf & @crlf & "Voulez-vous commencer ?")
if $msg=7 then Exit
While 1
_Change_name_file()
WEnd
func _Change_name_file()
local $nombre = 0
$Dossier_a_scanner = FileOpenDialog("Selectionnez les fichiers à modifier (Touche CTRL pour une selection multiple)", @ScriptDir,"Tous types (*.*)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
if @error then
msgbox(0,"RENOME DATE","Aucun fichier séléctionné... je quitte" & @CRLF & "Merci d'avoir utilisé ce programme",3)
Exit
EndIf
$tableau_liste_fichiers = StringSplit($Dossier_a_scanner,"|")
if UBound($tableau_liste_fichiers)=2 Then ; ici il n'y a qu'un seul fichier selectionné
Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = ""
$apathsplit=_PathSplit($tableau_liste_fichiers[1], $sDrive, $sDir, $sFilename, $sExtension) ; la procedure est differente
$fichier_en_cours = $apathsplit[3] & $apathsplit[4] ; car l'array est construite differement entre une selection unique et une multiple
$time_fichier=_ConvertTimeFormat(FileGetTime($apathsplit[0], 0, 1 ))
$split_date=StringSplit($fichier_en_cours,".")
if $split_date[0] > 2 then
$nom_fichier_modifie= $fichier_en_cours
Else
$nom_fichier_modifie= $time_fichier & "."& $fichier_en_cours
$nombre +=1
EndIf
FileMove($apathsplit[0],$apathsplit[1] & $apathsplit[2] & $nom_fichier_modifie, 9)
Else
for $i=2 to UBound($tableau_liste_fichiers)-1 ; si selection multiple
$fichier_en_cours = $tableau_liste_fichiers[$i]
$time_fichier=_ConvertTimeFormat(FileGetTime($tableau_liste_fichiers[1] & "\" & $fichier_en_cours, 0, 1 ))
$split_date=StringSplit($fichier_en_cours,".")
if $split_date[0] > 2 then
$nom_fichier_modifie= $fichier_en_cours
Else
$nom_fichier_modifie= $time_fichier & "."& $fichier_en_cours
$nombre +=1
EndIf
FileMove($tableau_liste_fichiers[1] & "\" & $fichier_en_cours,$tableau_liste_fichiers[1] & "\" & $nom_fichier_modifie, 9)
Next
EndIf
$msg2=msgbox(4,"RENOME DATE","Nombre de fichiers renomés : " & $nombre & @CRLF & "voulez vous en modifier d'autres ?")
if $msg2=7 then
msgbox(0,"RENOME DATE " & $version, "Merci d'avoir utilisé ce programme", 3)
Exit
Else
Return
EndIf
EndFunc
Func _ConvertTimeFormat ( $_FileTime ) ; convert 20100716213616 string time format to this time format YYYY/MM/DD HH:MM:SS
Return StringMid ( $_FileTime, 1 , 4 ) & '.' & StringMid ( $_FileTime, 5 , 2 ) & '.' & StringMid ( $_FileTime, 7 , 2 )
EndFunc ;==> _ConvertTimeFormat ( )
#include <File.au3>
#include <Date.au3>
#include <FileConstants.au3>
GLOBAL $version = 0.2
$msg=msgbox(4,"RENOME DATE","Ce programme permet de renommer les fichier sélectionnés dans le dossier de son choix avec la date de modification" & @crlf & "Le renommage est comme suit : AAAA.MM.JJ.fichier.ext " & " (les fichier déjà nommés ne seront pas traités)" & @crlf & @crlf & "Voulez-vous commencer ?")
if $msg=7 then Exit
While 1
_Change_name_file()
WEnd
func _Change_name_file()
local $nombre = 0
$Dossier_a_scanner = FileOpenDialog("Selectionnez les fichiers à modifier (Touche CTRL pour une selection multiple)", @ScriptDir,"Tous types (*.*)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
if @error then
msgbox(0,"RENOME DATE","Aucun fichier séléctionné... je quitte" & @CRLF & "Merci d'avoir utilisé ce programme",3)
Exit
EndIf
$tableau_liste_fichiers = StringSplit($Dossier_a_scanner,"|")
if UBound($tableau_liste_fichiers)=2 Then ; ici il n'y a qu'un seul fichier selectionné
Local $sDrive = "", $sDir = "", $sFilename = "", $sExtension = ""
$apathsplit=_PathSplit($tableau_liste_fichiers[1], $sDrive, $sDir, $sFilename, $sExtension) ; la procedure est differente
$fichier_en_cours = $apathsplit[3] & $apathsplit[4] ; car l'array est construite differement entre une selection unique et une multiple
$time_fichier=_ConvertTimeFormat(FileGetTime($apathsplit[0], 0, 1 ))
$split_date=StringSplit($fichier_en_cours,".")
if $split_date[0] > 2 then
$nom_fichier_modifie= $fichier_en_cours
Else
$nom_fichier_modifie= $time_fichier & "."& $fichier_en_cours
$nombre +=1
EndIf
FileMove($apathsplit[0],$apathsplit[1] & $apathsplit[2] & $nom_fichier_modifie, 9)
Else
for $i=2 to UBound($tableau_liste_fichiers)-1 ; si selection multiple
$fichier_en_cours = $tableau_liste_fichiers[$i]
$time_fichier=_ConvertTimeFormat(FileGetTime($tableau_liste_fichiers[1] & "\" & $fichier_en_cours, 0, 1 ))
$split_date=StringSplit($fichier_en_cours,".")
if $split_date[0] > 2 then
$nom_fichier_modifie= $fichier_en_cours
Else
$nom_fichier_modifie= $time_fichier & "."& $fichier_en_cours
$nombre +=1
EndIf
FileMove($tableau_liste_fichiers[1] & "\" & $fichier_en_cours,$tableau_liste_fichiers[1] & "\" & $nom_fichier_modifie, 9)
Next
EndIf
$msg2=msgbox(4,"RENOME DATE","Nombre de fichiers renomés : " & $nombre & @CRLF & "voulez vous en modifier d'autres ?")
if $msg2=7 then
msgbox(0,"RENOME DATE " & $version, "Merci d'avoir utilisé ce programme", 3)
Exit
Else
Return
EndIf
EndFunc
Func _ConvertTimeFormat ( $_FileTime ) ; convert 20100716213616 string time format to this time format YYYY/MM/DD HH:MM:SS
Return StringMid ( $_FileTime, 1 , 4 ) & '.' & StringMid ( $_FileTime, 5 , 2 ) & '.' & StringMid ( $_FileTime, 7 , 2 )
EndFunc ;==> _ConvertTimeFormat ( )