' ----------------------------------------------- ' Recherche de dossiers vides ' JC BELLAMY © 2003 ' ----------------------------------------------- Const SW_HIDE=0 Const SW_SHOWNORMAL=1 Dim folders() Set fso = CreateObject("Scripting.FileSystemObject") Set Shell=CreateObject("WScript.Shell") Set StdOut = WScript.StdOut Set args = Wscript.Arguments TestHost true If args.count=0 Then mess="FindEmptyFolders.vbs - Recherche de dossiers vides" & VBCRLF mess=mess & "JC BELLAMY © 2002" & VBCRLF mess=mess & "------------------" & VBCRLF mess=mess & "Syntaxe :" & VBCRLF mess=mess & "FindEmptyFolders []" & VBCRLF wscript.echo mess wscript.quit End If Nom=args(0) If not fso.FolderExists(Nom) Then wscript.echo "Le dossier " & Nom & " n'existe pas" wscript.quit End If set dir=fso.GetFolder(Nom) mess="L'analyse va commencer et peut prendre un temps plus ou moins long" & VBCRLF & VBCRLF mess=mess & "Les résultats sont stockés dans un fichier texte" & VBCRLF mess=mess & """listcomp.txt"" qui sera ouvert automatiquement" & VBCRLF mess=mess & "par le bloc-notes à la fin du traitement" rep=shell.Popup(mess, 2, " Recherche de dossiers vides", vbOKCancel + vbInformation) If rep=VBCancel Then wscript.quit nFolders=0 call exploreDir(dir) ErrorTest dir.path wscript.echo wscript.echo "Il a été trouvé " & nfolders & " dossier(s) vide(s) dans " & dir.Path ResultFile="listempty.txt" set ts=fso.CreateTextFile(ResultFile,true) Titre=nFolders & " dossier(s) vide(s) dans " & dir.Path ts.WriteLine(Titre) ts.WriteLine(String(len(Titre),"-")) For i = 0 To nFolders-1 ts.WriteLine(folders(i)) Next ts.close shell.run "notepad " & ResultFile, 1 wscript.quit '-------------------------------------------------------------------- Sub exploreDir(Dir) Dim collDir,curDir On error Resume next NbSubFolders=Dir.SubFolders.Count NbFiles=Dir.Files.Count If NbSubFolders+NbFiles=0 Then nFolders=nFolders+1 StdOut.write "." redim preserve Folders(nFolders) Folders(nFolders-1)=Dir.path Exit Sub End If ErrorTest dir.path If err.Number=70 Then 'Permission refusée err.clear else set collDir=Dir.SubFolders ErrorTest dir.path If err.Number=70 Then 'Permission refusée err.clear else For each curDir in collDir call exploreDir(curdir) Next end if end if End Sub '-------------------------------------------------------------------- Sub ErrorTest(path) If err.Number<>0 Then wscript.echo "erreur dossier " & path & " : " & Err.Description End If End Sub '-------------------------------------------------------------------- 'Sous-programme de test du moteur 'Vu les sorties générées, c'est CSCRIPT (et non pas WSCRIPT) 'qui doit être utilisé de préférence Sub TestHost(force) dim rep strappli=lcase(Wscript.ScriptFullName) strFullName =lcase(WScript.FullName) i=InStr(1,strFullName,".exe",1) j=InStrRev(strFullName,"\",i,1) strCommand=Mid(strFullName,j+1,i-j-1) if strCommand<>"cscript" then If force then Init="Ce script doit être lancé avec CSCRIPT" Else Init="Il est préférable de lancer ce script avec CSCRIPT" End If rep=MsgBox(Init & VBCRLF & _ "Cela peut être rendu permanent avec la commande" & VBCRLF & _ "cscript //H:CScript //S /Nologo" & VBCRLF & _ "Voulez-vous que ce soit fait automatiquement?", _ vbYesNo + vbQuestion,strappli) if rep=vbYes then nomcmd="setscript.bat" Set ficcmd = fso.CreateTextFile(nomcmd) ficcmd.writeline "@echo off" ficcmd.writeline "cscript //H:CScript //S /Nologo" ficcmd.writeline "pause" params="" For i = 0 To nbargs-1 params=params & " " & args(i) next ficcmd.writeline chr(34) & strappli & chr(34) & params ficcmd.writeline "pause" ficcmd.close shell.Run nomcmd, SW_SHOWNORMAL,true force=true end if If force then WScript.Quit end if end sub '--------------------------------------------------------------------