Le script ci-dessous renumérote tous les fichiers d'un répertoire donné.
Seul les fichiers qui commencent par un chiffre sont traités.
On ajoutera ou retirera alors une valeur à se chiffre et on renommera le fichier avec.
Option Explicit
'Version du 01 janvier 2016
'Version du 30 aout 2014
'Renumérote des fichiers qui commencent par un numéro en opérant une addition ou soustraction avec une valeur définie
'Par exemple avec un décalage de 2, 077 Toto.txt sera renommé en 079 Toto.txt et 05plop.jpg en 07plop.jpg
'Vous pouvez demander une longueur de chiffre comme par exemple 4, ainsi 077 Toto.txt deviendrait 0077 Toto.txt
Call DetectExeType()
Dim objFSO, CheminScriptActuel, CheminRepertoireAExplorer
Dim objFolder, MyFile
Dim NomFichierOriginal, NomFichierRenomme
Dim NumeroFichier
Dim LongueurNumeroVise, NumeroDepart, NumeroFin, Decalage
Dim ArrayMesFichiers, varListeFichiers, CompteurTableau
Dim ChiffreDebut, ChiffreFin ', MonChiffre
Dim UneLigneDeResultat
Dim VariableaAnalyser
'Déclaration des constantes pour la lecture et l'ecriture dans les fichiers
Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8
CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
CheminRepertoireAExplorer = InputBox("Entrez le chemin du répertoire","Chemin du répertoire",CheminScriptActuel)
LongueurNumeroVise = 2
NumeroDepart = 0
NumeroFin = 100
Decalage = 1
Decalage = InputBox("Entrer la valeur à ajouter ou soustraire. Exemple : +1 ou encore -2","Valeur decalage",Decalage)
LongueurNumeroVise = InputBox("Longueur du chiffre au début du nom du fichier." & VbCrLf & "3 donnerai un fichier du style 001 MonFichier" & VbCrLf & "2 donnerai 01 MonFichier","Longueur numéro",LongueurNumeroVise)
NumeroDepart = InputBox("Entrer le chiffre de départ pour opérer le décalage. Par exemple si 2 alors tout de ce qui est égale ou supérieur à 2 sera modifié","Numéro départ",NumeroDepart)
NumeroFin = InputBox("Entrer le dernier chiffre à modifier. Par exemple si 20, alors tout de ce qui sera au dessus de 20 ne sera pas modifié","Numéro fin",NumeroFin)
Decalage = Clng(Decalage)
NumeroDepart = Clng(NumeroDepart)
NumeroFin = Clng(NumeroFin)
LongueurNumeroVise = Clng(LongueurNumeroVise)
'Création des objets
Set objFSO = CreateObject("Scripting.FileSystemObject")
'On fait un objet qui représente le répertoire à explorer
Set objFolder = objFSO.GetFolder(CheminRepertoireAExplorer)
'On fait une première passe de tout les fichiers pour stocker leur nom dans un tableau. Cela servira à ne pas les traiter 2 fois, cad que quand un fichier est renommé, comme il porte un nouveau nom, il risque d'être traité une second fois dans une boucle qui scrute tous les fichiers d'un répertoire
For Each MyFile In objFolder.Files
varListeFichiers = varListeFichiers & MyFile.Name & ";"
Next
'On va maintenant traiter les fichiers contenus dans le tableau
If Len(varListeFichiers) > 0 Then 'Si j'ai bien récupéré une liste de fichiers
varListeFichiers = Left(varListeFichiers, Len(varListeFichiers)-1) 'On supprime le dernier caractère qui correspond à ;
ArrayMesFichiers = Split(varListeFichiers, ";") 'On crée un tableau avec la liste des fichiers
'Wscript.Echo "1 : " & ArrayWithMyLine(0)
'Pour tous les fichiers contenus dans le tableau
For CompteurTableau = LBound(ArrayMesFichiers) To Ubound(ArrayMesFichiers)
NomFichierOriginal = ArrayMesFichiers(CompteurTableau)
Wscript.echo NomFichierOriginal
If Len(NomFichierOriginal) > LongueurNumeroVise Then
Call FindFirstNum(NomFichierOriginal, ChiffreDebut, ChiffreFin, NumeroFichier)
If ((ChiffreDebut = 1) And (IsNumeric(NumeroFichier))) Then 'Si on a bien trouvé un chiffre et qu'il est en première position
'NumeroFichier = Left(NomFichierOriginal,LongueurNumeroVise) 'Récupération du numéro du fichier
Wscript.echo VbTab & "Commence bien par un chiffre. Il a une longueur de " & Len(NumeroFichier) 'LongueurNumeroVise
'NomFichierRenomme = Mid(NomFichierOriginal, LongueurNumeroVise+1) 'Récupération du nom du fichier
NomFichierRenomme = Mid(NomFichierOriginal, Len(NumeroFichier)+1) 'Récupération du nom du fichier
Wscript.echo VbTab & "Nom du fichier sans le numéro : " & NomFichierRenomme
Wscript.echo VbTab & "LongueurNumeroVise : " & LongueurNumeroVise
Wscript.echo VbTab & "NumeroFichier : " & NumeroFichier
Wscript.echo VbTab & "NomFichierOriginal : " & NomFichierOriginal
NumeroFichier = Clng(NumeroFichier)
If (NumeroFichier >= NumeroDepart) And (NumeroFichier <= NumeroFin) Then
NumeroFichier = NumeroFichier + Decalage
Wscript.echo VbTab & "Numero de fichier avec decalage de " & Decalage & " : " & NumeroFichier
Do while Len(NumeroFichier) > LongueurNumeroVise 'On rétrécit le numéro du fichier pour qu'il atteigne la longueur demandée
NumeroFichier = Mid(Cstr(NumeroFichier), 2) 'On supprime le premier caractère en partant par la gauche
Loop
Do while Len(NumeroFichier) < LongueurNumeroVise 'On complète le numéro de fichier avec des 0 pour qu'il atteigne la longueur demandée
NumeroFichier = "0" & Cstr(NumeroFichier)
Loop
'If (LongueurNumeroVise = 2) Then
'If Len(cstr(NumeroFichier)) = 1 Then NumeroFichier = Cstr("0" & NumeroFichier)
'End If
'If LongueurNumeroVise = 3 Then
'If (Len(cstr(NumeroFichier)) = 1) Then NumeroFichier = Cstr("00" & NumeroFichier)
'If (Len(cstr(NumeroFichier)) = 2) Then NumeroFichier = Cstr("0" & NumeroFichier)
'End If
NomFichierRenomme = NumeroFichier & NomFichierRenomme
Wscript.echo VbTab & "NomFichierRenomme : " & NomFichierRenomme
Set MyFile = objFSO.GetFile(CheminRepertoireAExplorer & "\" & NomFichierOriginal)
MyFile.Name = NomFichierRenomme
Set MyFile = Nothing
Else
Wscript.echo VbTab & NumeroFichier & " est un numéro qui n'a pas à être traité"
End If
Else
Wscript.echo VbTab & "Pas de chiffre en début de position de " & NomFichierOriginal
End If
Else
Wscript.echo VbTab & NomFichierOriginal & " a un nom trop court"
End If
Wscript.echo ""
Next
End If
Set objFolder = Nothing
Set objFSO = Nothing
Wscript.echo "Terminé !"
Sub FindFirstNum(ByVal VariableaAnalyser, Byref ChiffreDebut, Byref ChiffreFin, Byref MonChiffre)
Dim Compteur
'Dans une chaine de caractère, retourne la première série de chiffres consécutive
'Par exemple pour "Bol 234 5 raid 6" on retournera 234
'ChiffreDebut correspond à la position du début du chiffre dans la chaîne. 1 correspond à la toute première position. 0 veut dire que l'on n'a rien trouvé
'ChiffreFin correspond à la position du dernier chiffre dans la chaîne.
'MonChiffre : le premier chiffre que l'on a trouvé dans la chaîne
ChiffreDebut = 0 'Valeur par défaut
ChiffreFin = 0 'Valeur par défaut
Compteur = 1 'On se positionne au début de la ligne
'Analyse de la ligne de gauche à droite
Do
If IsNumeric(Mid(VariableaAnalyser, Compteur, 1)) = True Then 'Si le caractère scruté est un chiffre
ChiffreDebut = Compteur
Exit Do
Else 'Si on n'a pas encore trouvé de chiffre, on incrémente de 1
Compteur = Compteur + 1
End If
Loop While (ChiffreDebut = 0 And (Compteur =< Len(VariableaAnalyser))) ' (IsNumeric(Mid(VariableaAnalyser, Compteur, 1)) = False)
If ChiffreDebut > 0 Then 'Si on a trouvé le début d'un chiffre
'Wscript.echo ChiffreDebut
ChiffreFin = ChiffreDebut 'Par défaut la fin du chiffre est un digit après le début
Compteur = ChiffreDebut 'On se positionne au début du chiffre trouvé
Do
If IsNumeric(Mid(VariableaAnalyser, Compteur, 1)) = False Then 'Si le caractère scruté n'est plus un chiffre
ChiffreFin = Compteur - 1
Exit Do
Else 'Si on a encore trouvé un chiffre, alors on avant au caractère suivant mais on note le résultat
ChiffreFin = Compteur
Compteur = Compteur + 1
End If
Loop While (Compteur =< Len(VariableaAnalyser)) 'Tant que l'on n'est pas arrivé à la fin de la ligne
'Wscript.echo ChiffreFin
MonChiffre = Mid(VariableaAnalyser, ChiffreDebut, (ChiffreFin - ChiffreDebut) + 1)
Wscript.echo MonChiffre
Else
Wscript.echo "Pas de chiffre trouvé"
End If
End Sub
Sub DetectExeType()
'Version du 10 juillet 2008
Dim ScriptHost
Dim ShellObject
Dim CurrentPathExt
Dim EnvObject
Dim RegCScript
Dim RegPopupType ' This is used to set the pop-up box flags.
' I couldn't find the pre-defined names
RegPopupType = 32 + 4
On Error Resume Next
ScriptHost = WScript.FullName
ScriptHost = Right(ScriptHost, Len(ScriptHost) - InStrRev(ScriptHost, "\"))
If (UCase(ScriptHost) = "WSCRIPT.EXE") Then
WScript.Echo ("This script does not work with WScript.")
' Create a pop-up box and ask if they want to register cscript as the default host.
Set ShellObject = WScript.CreateObject("WScript.Shell")
' -1 is the time to wait. 0 means wait forever.
RegCScript = ShellObject.PopUp("Would you like to register CScript as your default host for VBscript?", 0, "Register CScript", RegPopupType)
If (Err.Number <> 0) Then
ReportError ()
WScript.Echo "To run this script using CScript, type: ""CScript.exe " & WScript.ScriptName & """"
WScript.Quit (GENERAL_FAILURE)
WScript.Quit (Err.Number)
End If
' Check to see if the user pressed yes or no. Yes is 6, no is 7
If (RegCScript = 6) Then
ShellObject.RegWrite "HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command\", "%WINDIR%\System32\CScript.exe //nologo ""%1"" %*", "REG_EXPAND_SZ"
ShellObject.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VBSFile\Shell\Open\Command\", "%WINDIR%\System32\CScript.exe //nologo ""%1"" %*", "REG_EXPAND_SZ"
' Check if PathExt already existed
CurrentPathExt = ShellObject.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PATHEXT")
If Err.Number = &H80070002 Then
Err.Clear
Set EnvObject = ShellObject.Environment("PROCESS")
CurrentPathExt = EnvObject.Item("PATHEXT")
End If
ShellObject.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PATHEXT", CurrentPathExt & ";.VBS", "REG_SZ"
If (Err.Number <> 0) Then
ReportError ()
WScript.Echo "Error Trying to write the registry settings!"
WScript.Quit (Err.Number)
Else
WScript.Echo "Successfully registered CScript"
End If
Else
WScript.Echo "To run this script type: ""CScript.Exe adsutil.vbs <cmd> <params>"""
End If
Dim ProcString
Dim ArgIndex
Dim ArgObj
Dim Result
ProcString = "Cscript //nologo " & WScript.ScriptFullName
Set ArgObj = WScript.Arguments
For ArgIndex = 0 To ArgCount - 1
ProcString = ProcString & " " & Args(ArgIndex)
Next
'Now, run the original executable under CScript.exe
Result = ShellObject.Run(ProcString, 0, True)
WScript.Quit (Result)
End If
End Sub
Lien vers le fichier : cliquez ici
Article(s) en relation(s)