Créer une copie de test vide d’un arbre de dossiers par VbScript
Cette organisation avait mis des informations importantes dans un dossier très large contenant une quantité importante de documents approchant de plusieurs Go. Certains documents devaient être déplacés vers un dossier archive à partir de certaines caractéristiques du fichier comme l’occurrence de certains caractères dans le nom du fichier, date de création, etc.
A cette fin j’ai crée un script assez compliqué qui devrait couvrir beaucoup de situations diverses. Evidemment je ne voulais pas tester sur le dossier réel. La création d’une copie à des fins d’essai par l’utilisation de Robocopy par ex. prendrait beaucoup de temps. Ensuite utiliser cette copie pour exécuter des tests serait très lent en plus en raison de la grande taille de la copie.
Le script suivant très simple crée une copie exacte d’un arbre de dossiers mais tous les fichiers ont une taille à zéro. Tester avec ce dossier « dummy » est beaucoup plus rapide et produit des résultats très comparables.
Option Explicit Dim sSourceRoot, sDestRoot, Msg sSourceRoot= "C:\Temp" sDestRoot= "E:\Temp" Msg = "Create a test copy of the folder with only dummy files." sSourceRoot = InputBox(Msg & vbCrLf & "Path source folder:",,sSourceRoot) sDestRoot = InputBox(Msg & vbCrLf & "Path destination folder:",,sDestRoot) CopyContentFolder sSourceRoot, sDestRoot MsgBox "Finished" Function CopyContentFolder(sPathSourceFolder,sPathDestFolder) Dim oFSO, oShell Dim fld ' as folder Dim fld_dest ' as folder Dim fc ' as folder Dim f ' as file Dim sNewPath Dim dDateLastModified Set oFSO = CreateObject("Scripting.FileSystemObject") Set oShell = CreateObject("Shell.Application") Set fld = oFSO.GetFolder(sPathSourceFolder) If Not oFSO.FolderExists(sPathDestFolder) Then Set fld_dest = oFSO.CreateFolder(sPathDestFolder) Else Set fld_dest = oFSO.GetFolder(sPathDestFolder) End If For Each f In fld.Files 'Create dummy file in destination folder dDateLastModified = f.DateLastModified oFSO.CreateTextFile(sPathDestFolder & "\" & f.Name) oShell.NameSpace(sPathDestFolder).ParseName(f.Name).ModifyDate = dDateLastModified Next For Each fc In fld.SubFolders 'recursive processing Call CopyContentFolder(fc.Path,fld_dest.Path & "\" & fc.Name) Next End Function