Comparer deux arborescence de répertoires - VB/VBA/VBS - Programmation
MarshPosté le 25-03-2008 à 15:39:29
Salut,
j'ai écrit un script qui doit parcourir deux arborescence (via des chemins réseau). Le but est de déterminer si les deux arbo contiennent au moins les mêmes noms de fichiers et répertoires.
Voici la fonction créée pour cela :
Function RepComp(sChemin1, sChemin2) 'Count files in the folder and sub-folders Dim ObjRep1: Set ObjRep1 = oFSO.GetFolder(sChemin1) 'folders source Dim ObjRep2: Set ObjRep2 = oFSO.GetFolder(sChemin2) 'folders dest Dim ObjSubRep1: Set ObjSubRep1 = ObjRep1.SubFolders 'sub-folders of source Dim ObjSubRep2: Set ObjSubRep2 = ObjRep2.SubFolders 'sub-folders of source Dim ObjSubRep1Item Dim ObjSubRep2Item Dim ObjSubRepItem 'ObjSubRep2Item = ObjRep2.Path For Each ObjSubRep1Item In ObjSubRep1 'for each sub-folder ObjSubRep2Item = ObjRep2.Path & "\" & ObjSubRep1Item.Name IF oFSO.FolderExists(ObjSubRep2Item) THEN 'wscript.echo vbTab & Err.Number & ": " & ObjSubRep1Item.Path & " --- " & ObjSubRep2Item RepComp ObjSubRep1Item.Path, ObjSubRep2Item 'traiter les sous-dossiers ELSE logfile.writeline VbCrLf & vbTab & "Error : folder " & ObjSubRep1Item.Path & " does not exist in " & ObjRep2.Path END IF Next For Each ObjSubRep2Item In ObjSubRep2 'for each sub-folder ObjSubRepItem = ObjRep1.Path & "\" & ObjSubRep2Item.Name IF oFSO.FolderExists(ObjSubRepItem) THEN 'wscript.echo vbTab & Err.Number & ": " & ObjSubRepItem & " --- " & ObjSubRep2Item RepComp ObjSubRep2Item.Path, ObjSubRepItem 'traiter les sous-dossiers ELSE logfile.writeline VbCrLf & vbTab & "Error : folder " & ObjSubRepItem & " does not exist in " & ObjRep1.Path END IF Next ' Dim ObjRepFind: Set ObjRepFind = oFSO.GetFolder(sChemin1) 'folder Dim ObjSubFile: Set ObjSubFile = ObjRep1.Files 'Files Dim ObjSubFileItem For Each ObjSubFileItem In ObjSubFile 'For each FILE in the folder If oFSO.FileExists(ObjRep2.Path & "\" & ObjSubFileItem.Name) Then 'Wscript.Echo VbCrLf & vbTab & vbTab & vbTab & "-->" & ObjSubFileItem.Name' & " " & ObjSubFileItem.Path Else logfile.writeline VbCrLf & vbTab & "Error : File " & ObjSubFileItem.Path & " does not exist in " & ObjRep2.Path End If ' filecpt = filecpt + 1 Next Set ObjSubFile = ObjRep2.Files 'Files For Each ObjSubFileItem In ObjSubFile 'For each FILE in the folder If oFSO.FileExists(ObjRep1.Path & "\" & ObjSubFileItem.Name) Then 'Wscript.Echo VbCrLf & vbTab & vbTab & vbTab & "<--" & ObjSubFileItem.Name' & " " & ObjSubFileItem.Path Else logfile.writeline VbCrLf & vbTab & "Error : File " & ObjSubFileItem.Path & " does not exist in " & ObjRep1.Path End If 'filecpt = filecpt + 1 Next logfile.writeline VbCrLf & "End of file and sub-folders comparison for " & sChemin1 & " and " & sChemin2 End Function
Ca marche très très bien sauf que ... c'est hyper lent ! A chaque dossier j'ai une latence d'environ 3s. La structure contient environ 400 dossiers: le parcours met donc environ ... 3h.
Voyez vous un moyen d'optimiser le bidule ?
--------------- Mieux vaut fermer sa gueule et passer pour un con, plutot que de l'ouvrir, et montrer qu'on l'est...
Marsh Posté le 25-03-2008 à 15:39:29
Salut,
j'ai écrit un script qui doit parcourir deux arborescence (via des chemins réseau).
Le but est de déterminer si les deux arbo contiennent au moins les mêmes noms de fichiers et répertoires.
Voici la fonction créée pour cela :
Function RepComp(sChemin1, sChemin2) 'Count files in the folder and sub-folders
Dim ObjRep1: Set ObjRep1 = oFSO.GetFolder(sChemin1) 'folders source
Dim ObjRep2: Set ObjRep2 = oFSO.GetFolder(sChemin2) 'folders dest
Dim ObjSubRep1: Set ObjSubRep1 = ObjRep1.SubFolders 'sub-folders of source
Dim ObjSubRep2: Set ObjSubRep2 = ObjRep2.SubFolders 'sub-folders of source
Dim ObjSubRep1Item
Dim ObjSubRep2Item
Dim ObjSubRepItem
'ObjSubRep2Item = ObjRep2.Path
For Each ObjSubRep1Item In ObjSubRep1 'for each sub-folder
ObjSubRep2Item = ObjRep2.Path & "\" & ObjSubRep1Item.Name
IF oFSO.FolderExists(ObjSubRep2Item) THEN
'wscript.echo vbTab & Err.Number & ": " & ObjSubRep1Item.Path & " --- " & ObjSubRep2Item
RepComp ObjSubRep1Item.Path, ObjSubRep2Item 'traiter les sous-dossiers
ELSE
logfile.writeline VbCrLf & vbTab & "Error : folder " & ObjSubRep1Item.Path & " does not exist in " & ObjRep2.Path
END IF
Next
For Each ObjSubRep2Item In ObjSubRep2 'for each sub-folder
ObjSubRepItem = ObjRep1.Path & "\" & ObjSubRep2Item.Name
IF oFSO.FolderExists(ObjSubRepItem) THEN
'wscript.echo vbTab & Err.Number & ": " & ObjSubRepItem & " --- " & ObjSubRep2Item
RepComp ObjSubRep2Item.Path, ObjSubRepItem 'traiter les sous-dossiers
ELSE
logfile.writeline VbCrLf & vbTab & "Error : folder " & ObjSubRepItem & " does not exist in " & ObjRep1.Path
END IF
Next
'
Dim ObjRepFind: Set ObjRepFind = oFSO.GetFolder(sChemin1) 'folder
Dim ObjSubFile: Set ObjSubFile = ObjRep1.Files 'Files
Dim ObjSubFileItem
For Each ObjSubFileItem In ObjSubFile 'For each FILE in the folder
If oFSO.FileExists(ObjRep2.Path & "\" & ObjSubFileItem.Name) Then
'Wscript.Echo VbCrLf & vbTab & vbTab & vbTab & "-->" & ObjSubFileItem.Name' & " " & ObjSubFileItem.Path
Else
logfile.writeline VbCrLf & vbTab & "Error : File " & ObjSubFileItem.Path & " does not exist in " & ObjRep2.Path
End If
' filecpt = filecpt + 1
Next
Set ObjSubFile = ObjRep2.Files 'Files
For Each ObjSubFileItem In ObjSubFile 'For each FILE in the folder
If oFSO.FileExists(ObjRep1.Path & "\" & ObjSubFileItem.Name) Then
'Wscript.Echo VbCrLf & vbTab & vbTab & vbTab & "<--" & ObjSubFileItem.Name' & " " & ObjSubFileItem.Path
Else
logfile.writeline VbCrLf & vbTab & "Error : File " & ObjSubFileItem.Path & " does not exist in " & ObjRep1.Path
End If
'filecpt = filecpt + 1
Next
logfile.writeline VbCrLf & "End of file and sub-folders comparison for " & sChemin1 & " and " & sChemin2
End Function
Ca marche très très bien sauf que ...
c'est hyper lent !
A chaque dossier j'ai une latence d'environ 3s.
La structure contient environ 400 dossiers: le parcours met donc environ ... 3h.
Voyez vous un moyen d'optimiser le bidule ?
---------------
Mieux vaut fermer sa gueule et passer pour un con, plutot que de l'ouvrir, et montrer qu'on l'est...