[Déplacé VB6 --> VBS] Lister les fichiers et répertoires d'un dossier

Résolu
axlemush Messages postés 2 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 19 février 2010 - 18 févr. 2010 à 15:01
axlemush Messages postés 2 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 19 février 2010 - 19 févr. 2010 à 12:12
Bonjours, j'éssaye de créer une applicationn en VBScript qui liste les fichiers et dossiers/sous-dossiers/ect ... d'un répertoire.
Mais mon script bug, et je sais pas d'ou vient ce bug, pourriez-vous m'aider ?

Voici mon script :
Dim stRep1, stRep2
Dim oFSO0,oFld0,oFSO1,oFld1,oFSO2,oFld2
Dim oFl1, oFl2

Set oFSO0 = CreateObject("Scripting.FileSystemObject")
stRep0 = "J:\Essais" & ""
If oFSO0.FolderExists(stRep0) Then
For each oFld0 in oFSO0.GetFolder(stRep0).SubFolders
Wscript.Echo oFld0.Name
recherche1 (stRep0 & oFld0.Name)
Next
End If

sub recherche1(ByVal n1)
Set oFSO1 = CreateObject("Scripting.FileSystemObject")
stRep1 = n1 & ""
If oFSO1.FolderExists(stRep1) Then
For each oFld1 in oFSO1.GetFolder(stRep1).SubFolders
Wscript.Echo oFld1.Name
recherche2 (stRep1 & oFld1.Name)
    Next
For each oFl1 in oFSO1.GetFolder(stRep1).Files
Wscript.Echo oFl1.Name
Next
else
Wscript.Echo "Le répertoire" & stRep1 & "n'existe pas !"
End If
End sub

sub recherche2(ByVal n2)
Set oFSO2 = CreateObject("Scripting.FileSystemObject")
stRep2 = n2 & ""
If oFSO2.FolderExists(stRep2) Then
For each oFld2 in oFSO2.GetFolder(stRep2).SubFolders
Wscript.Echo oFld2.Name
recherche1 (stRep2 & oFld2.Name)
Next
For each oFl2 in oFSO2.GetFolder(stRep2).Files
Wscript.Echo oFl2.Name
Next
else
Wscript.Echo "Le répertoire" & stRep2 & "n'existe pas !"
End If
End sub

Merci de votre aide
axlemush

4 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
18 févr. 2010 à 21:07
 re,


Pour lister fichiers + sous-répertoire(s) dès le 1er niveau:
Option Explicit

Dim objFso, RootFolder
Dim RootPath
RootPath = "C:\TEMP" 

Set objFso = CreateObject("Scripting.FileSystemObject")
Set RootFolder = objFso.GetFolder(RootPath) 

Call SearchFolders(RootFolder) 
  
Set objFso = Nothing
Set RootFolder = Nothing
WScript.Quit
'##############################################
Sub SearchFolders(ArgFolder) 
On Error Resume Next 'permission sur folder/file
    Dim file, subfolder
    For Each file In ArgFolder.Files 
        Wscript.Echo file 
    Next 
    
    For Each subfolder In ArgFolder.SubFolders 
        Wscript.Echo subfolder 
        Call SearchFolders(subfolder) 
    Next 
End Sub 


jean-marc
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 févr. 2010 à 15:50
Salut

"je sais pas d'ou vient ce bug" et démerdez-vous !

S'il bugue, il faudrait peut-être nous dire ce qu'il est sensé voir et qu'il ne voit pas !
Erreur ? Laquelle ?

En faisant une simple recherche de "vbs lister fichiers répertoire" sur le site, on tombe sur <cet exemple VBA> que tu sauras décortiquer pour le transcrire très facilement en VBS.
Il faut rendre ta fonction récursive afin qu'elle s'appelle elle-même pour parcourir tous les sous-répertoires.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
18 févr. 2010 à 20:25
 Bonsoir,



Le bug vient d'une mauvaise gestion des folders et subfolders.




Option Explicit

Dim objFso, RootFolder
Dim RootPath, idx
idx = 0
RootPath = "C:\TEMP" 

Set objFso = CreateObject("Scripting.FileSystemObject")
Set RootFolder = objFso.GetFolder(RootPath) 

Call SearchFolders(RootFolder, idx) 
  
Set objFso = Nothing
Set RootFolder = Nothing
WScript.Quit
'##############################################
Sub SearchFolders(ArgFolder, idx) 
    Dim file, subfolder
    If idx <> 0 Then
       For Each file In ArgFolder.Files 
           Wscript.Echo file 
       Next 
    End If
    
    For Each subfolder In ArgFolder.SubFolders 
        idx = idx + 1
        Wscript.Echo subfolder 
        Call SearchFolders(subfolder, idx) 
    Next 
End Sub  


jean-marc
0
axlemush Messages postés 2 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 19 février 2010
19 févr. 2010 à 12:12
Merci pour vos réponses, les deux scripts que vous avez donné marche impect.
0
Rejoignez-nous