OVH Cloud OVH Cloud

Accéder aux sous-répertoires pour renommer des fichiers

3 réponses
Avatar
Dan
Bonjour,
J'utilise un script de JC Bellamy (que j'ai quelque peu modifié pour mes
besoins) et qui me permet de modifier le nommage des fichiers : remplacement
des caractères accentués... ainsi que de vérifier la longueur des noms de
fichiers.
Actuellement je ne peux réaliser cette manipulation que répertoire par
répertoire (et j'en ai des centaines).
Il faudrait que je puisse accéder à l'ensemble des sous-répertoires (très
nombreux) pour réaliser mes modifications de façons plus simples.
Je joins le script utilisé.
Merci d'avance pour vos idées et propositions.
Cordialement
Dan

' ----------------------------------------------------------
' Script VBS de renommage sans accent de fichiers ou dossiers
' contenus dans un dossier (depuis l'explorateur)
' Auto-installable (par exécution sans paramètres)
' JC BELLAMY © 2002
' ----------------------------------------------------------
Dim shell, args, fso, folder, collfic,curfic
Set args = Wscript.Arguments
Set shell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
If args.count=0 Then
' Auto-installation
Script=Wscript.ScriptFullName
Key="HKEY_CLASSES_ROOT\Folder\shell\Sansaccents\"
shell.RegWrite Key,"Correction auto des noms de fichiers"
Command="cscript """ & Script & """ ""%1"""
shell.RegWrite Key & "command\",Command
MsgBox "Script "& Script &" installé", vbInformation, "Renommage de
fichiers sans accent"
wscript.quit
end if
curdir=args(0)
If not fso.FolderExists(curdir) Then
wscript.echo "Répertoire inexistant"
wscript.quit
End If
set folder=fso.GetFolder(curdir)
set collfic=folder.Files
tempname="xxxxx.xxx"
nfic=collfic.count
wscript.echo nfic & " fichiers"
dim fic()
redim fic(nfic+1)
n=0
For each curfic in collfic
n=n+1
fic(n)=curfic.Name
next
If right(curdir,1)<>"\" Then curdir=curdir & "\"
n=0
For i = 1 To nfic
oldname=fic(i)
set curfic=fso.GetFile(curdir & oldname)
lowname=oldname 'lcase(oldname)
l=len(lowname)
newname=""
For j = 1 To l
c=Mid(lowname,j,1)
Select Case c
Case "à", "â", "ä", "á","æ"
car="a"
Case "é", "è", "ê", "ë"
car="e"
Case "î","ï"
car="i"
Case "ô","ö"
car="o"
Case "û", "ü", "ù"
car="u"
Case "ÿ"
car="y"
Case "ç"
car="c"
Case "ñ"
car="n"
Case " "
car="_"
Case else car=c
End Select
newname=newname & car
Next

If newname<>lowname Then
n=n+1
newfic=curdir & newname
If fso.FileExists(newfic) Then
fso.DeleteFile newfic, true
End If
curfic.Name=tempname
curfic.Name=newname
wscript.echo i & " : " & oldname & " renommé en " & newname '& cstr(v_long)
End If
Next

'** Compte les caractères
v_folder = fso.GetFolder(curdir)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(v_folder)
Set fc = f.Files

For Each fichier in fc
v_long=len(fichier.name)
if v_long > 50 then

wscript.echo
"________________________________________________________________________________"
wscript.echo fichier.name + " " + " *****=> " + cstr(v_long) & " caractères"
end if
Next
'** Fin de comptage des caractères

if n > 1 then
MsgBox n & " fichiers renommés",,"Renommage sans accents dans " & Curdir
else
MsgBox n & " fichier renommé",,"Renommage sans accents dans " & Curdir
end if

3 réponses

Avatar
Jean-Claude BELLAMY
Dans le message news: ,
Dan s'est ainsi exprimé:

Bonjour,
J'utilise un script de JC Bellamy (que j'ai quelque peu modifié pour
mes besoins) et qui me permet de modifier le nommage des fichiers :
remplacement des caractères accentués... ainsi que de vérifier la
longueur des noms de fichiers.
Actuellement je ne peux réaliser cette manipulation que répertoire par
répertoire (et j'en ai des centaines).
Il faudrait que je puisse accéder à l'ensemble des sous-répertoires
(très nombreux) pour réaliser mes modifications de façons plus
simples.


Voici un sous-programme d'exploration récursive de dossier

'--------------------------------------------------------------------
Sub explore(dossier)
set d=fso.GetFolder(dossier)
set colld=d.SubFolders
For each dir in colld
explore dir.Path
Next
' insérer ici le code à exécuter pour chaque sous-répertoire...
' ......
' ......
End Sub
'--------------------------------------------------------------------


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*

Avatar
Dan
Bonjour Jean-Claude,
Tout d'abord, merci beaucoup pour vos scripts (très utiles), votre site et
vos conseils.
Je débute en vbs et je n'ai pas réussi à positionner votre morceau de code
au bon endroit pour faire tourner mon script. Si vous pouviez me conseiller
plus précisément ?
Cordialement
Dan


Dans le message news: ,
Dan s'est ainsi exprimé:

Bonjour,
J'utilise un script de JC Bellamy (que j'ai quelque peu modifié pour
mes besoins) et qui me permet de modifier le nommage des fichiers :
remplacement des caractères accentués... ainsi que de vérifier la
longueur des noms de fichiers.
Actuellement je ne peux réaliser cette manipulation que répertoire par
répertoire (et j'en ai des centaines).
Il faudrait que je puisse accéder à l'ensemble des sous-répertoires
(très nombreux) pour réaliser mes modifications de façons plus
simples.


Voici un sous-programme d'exploration récursive de dossier

'--------------------------------------------------------------------
Sub explore(dossier)
set d=fso.GetFolder(dossier)
set colld=d.SubFolders
For each dir in colld
explore dir.Path
Next
' insérer ici le code à exécuter pour chaque sous-répertoire...
' ......
' ......
End Sub
'--------------------------------------------------------------------


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*






Avatar
Lord Mathius
simplent tu met comme indiquer dans ton code, tu cole ton code de
modification des nom dans la section citer, puis tu defini dans ton main (
section principal quoi) explorer(".")
tout simplement et ainsi il va analyser tout les sous rep du rep ou tu te
trouve.

"Dan" wrote:

Bonjour Jean-Claude,
Tout d'abord, merci beaucoup pour vos scripts (très utiles), votre site et
vos conseils.
Je débute en vbs et je n'ai pas réussi à positionner votre morceau de code
au bon endroit pour faire tourner mon script. Si vous pouviez me conseiller
plus précisément ?
Cordialement
Dan


Dans le message news: ,
Dan s'est ainsi exprimé:

Bonjour,
J'utilise un script de JC Bellamy (que j'ai quelque peu modifié pour
mes besoins) et qui me permet de modifier le nommage des fichiers :
remplacement des caractères accentués... ainsi que de vérifier la
longueur des noms de fichiers.
Actuellement je ne peux réaliser cette manipulation que répertoire par
répertoire (et j'en ai des centaines).
Il faudrait que je puisse accéder à l'ensemble des sous-répertoires
(très nombreux) pour réaliser mes modifications de façons plus
simples.


Voici un sous-programme d'exploration récursive de dossier

'--------------------------------------------------------------------
Sub explore(dossier)
set d=fso.GetFolder(dossier)
set colld=d.SubFolders
For each dir in colld
explore dir.Path
Next
' insérer ici le code à exécuter pour chaque sous-répertoire...
' ......
' ......
End Sub
'--------------------------------------------------------------------


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*