Script VBS de tronquage recursif de nom de fichier ou de rep

the_nail Messages postés 1 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 10 juin 2004 - 10 juin 2004 à 19:40
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009 - 11 juin 2004 à 14:01
Bonjour,

je souhaite ecrire un script WSH/VBS qui tronque tous les noms fichiers/repertoires/sous-fichiers/sous-repertoires dont la longueur est > 16 caracteres (le nb max de caractere doit etre 16).
Voila le code qua j'ai commencer à ecrire :

Option Explicit 
Dim RootPath 

while RootPath = "" 
 RootPath = InputBox ("Chemin du répertoire à traiter ? : ")  
wend 

Dim SelectedFiles 
Set SelectedFiles = CreateObject("Scripting.Dictionary") 

Dim SelectedFolders 
Set SelectedFolders = CreateObject("Scripting.Dictionary") 

Dim fso 
Set fso = CreateObject("Scripting.FileSystemObject") 

Dim RootFolder 
Set RootFolder = fso.GetFolder(RootPath) 

Dim FicLog 
Set FicLog = fso.CreateTextFile(".\truncate_log.txt") 

Call SearchFolders(RootFolder) 

WScript.Echo SelectedFiles.Count & " fichiers trop longs (> 16 
caracteres)..." 
WScript.Echo SelectedFolders.Count & " répertoires trop longs (> 16 
caracteres)..." 

WScript.Echo "Traitement terminé!" 
WScript.Quit 

Sub SelectFile(ArgFile) 
  If Len(ArgFile.name) > 16 Then 
    Set SelectedFiles(ArgFile.Path) = ArgFile 
    Call TruncName(ArgFile) 
  End If 
End Sub 

Sub SelectFolder(ArgFolder) 
  If Len(ArgFolder.Name) > 16 Then 
    Set SelectedFolders(ArgFolder.Path) = ArgFolder 
    Call TruncName(ArgFolder) 
  End If 
End Sub 

Sub SearchFolders(ArgFolder) 
  Dim file, subfolder 
  For Each file In ArgFolder.Files 
    Call SelectFile(file) 
  Next 
  For Each subfolder In ArgFolder.SubFolders 
    Call SelectFolder(subfolder) 
    Call SearchFolders(subfolder) 
 Next 
End Sub 

sub TruncName(Obj) 
 dim NewChain 
 dim OldChain 
 OldChain = Obj.Name 
 NewChain = left(OldChain,16) 
 'FicLog.WriteLine Obj.name 
 Obj.Name = replace(OldChain,OldChain,Newchain) 
  
end sub 


Ca ca marche....
Mais il faudrai que le script memorise dans un fichier log toutes les modifications faites sur les noms de fichiers ou repertoires (ancien nom, nouveau nom) dans le but de permettre l'execution d'un traitement inverse qui restaurerai les anciens noms correctement (> 16 caracteres)

Une idée???

merci

1 réponse

cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
11 juin 2004 à 14:01
Salut !

Je pense qu'il suffit de rajouter quelques lignes dans la fonction TruncName : Avant de tronquer tu inscrit dans ton fichier l'ancien nom et le nouveau. Si tu veut aussi le nom des autres fichiers qui n'ont pas été tronqués, tu inscrit leur noms a chaque fois que tu en trouves un et qu'il ne faut pas le tronquer.

Tu peut eventuellement mettre des caractrères spéciaux dans ce fichier afin de différencier et les fichiers tronqués et leurs nom d'origine et les fichiers non tronqués.

Pour le code je ne peut pas t'aider car je suis nul en VBS, désolé !

@+ Neria
Rejoignez-nous