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

Messages postés
2
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
19 février 2010
- - Dernière réponse : 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
3
Merci
 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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_JMO
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
77
0
Merci
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)
Commenter la réponse de cs_Jack
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
0
Merci
 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
Commenter la réponse de cs_JMO
Messages postés
2
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
19 février 2010
0
Merci
Merci pour vos réponses, les deux scripts que vous avez donné marche impect.
Commenter la réponse de axlemush

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.