Lister tous les dossiers d'un disque

mahelan Messages postés 51 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 4 avril 2007 - 4 avril 2007 à 19:32
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 - 6 avril 2007 à 13:43
Bonsoir,

Je veut lister tous les dossiers d'un disque vert un resultat.txt

je mais trouve pas

Option explicit
Const resultat = "C:\resultat.txt"
Dim WshShell, Path, Return
Set WshShell = WScript.CreateObject("WScript.Shell")
Path  = WshShell.ExpandEnvironmentStrings("%SystemDrive%") Call ListTasks(Path)
Return = WshShell.Run(resultat)'
Set WshShell = Nothing
'--------------------------------------------------
Function ListTasks(strPath)
Dim fso, Dossiers, fichier, fichiers, objTextStream
Set fso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = fso.OpenTextFile(resultat, 2, True)

Set Dossiers = fso.GetFolder(strPath)
Set fichiers = Dossiers.Files

For Each fichier in fichiers
       objTextStream.Write fichier.Path &vbCrLf
   
Next
objTextStream.Close

Set objTextStream = Nothing
Set fso = Nothing
Set Dossiers = Nothing
End Function

Mais c'est pas bon ça sa liste les fichiers et pas tous

je veut tous les dossiers du system c'est possible?

Merci

6 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
4 avril 2007 à 19:36
Salut,

regarde ma source :
http://www.vbfrance.com/codes/LISTER-DOSSIERS-DISQUES-LOCAUX-AVEC-METHODE-WMI-CLASSE_41751.aspx

Bien que ça demande des ressources (WMI) au processeur, ça fonctionne bien, te reste plus qu'à modifier pour que le résultat (cf. sName dans mon code)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
mahelan Messages postés 51 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 4 avril 2007
4 avril 2007 à 20:38
Salut,

merci beaucoup
mais je vois pas trop quoi changer
avec ma methode c'est pas possible?

Merci
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 avril 2007 à 08:40
Salut,
IL faut utiliser la récursivité si tu Veux TOUT lister.
De plus la collection Files ne contient QUE des fichiers (logique non?)  et non des répertoires...
Teste le conde ci dessous (mais pour commencer essaie de ne pas utiliser C:\ comme chemin de base sinon tu peux aller te coucher en attendant la fin).

Je te conseille plutot un petit répertoire de test... (DE PLUS JE NE L'AI PAS TESTE CHEZ MOI)

Le code suivant ecrit dans le Fichier résulat les FICHIERS ET LES REPERTOIRES ... a toi d'enlever ce dont tu ne veux pas.
Voila j'espère que cela t'aide.
NOTE: je ne suis pas aller voir mais je suppose que tu aurais pu trouver ton bonheur sur www.codyx.org . y penser la pour la prochaine fois.

Option Explicit

Const resultat = "C:\resultat.txt"
Dim WshShell, Path, Return
Set WshShell = WScript.CreateObject("WScript.Shell")
Path = WshShell.ExpandEnvironmentStrings("%SystemDrive%")
Set fso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = fso.OpenTextFile(resultat, 2, True)
Call ListTasks(Path, fso, objTextStream)
objTextStream.Close
Set objTextStream = Nothing
Set fso = Nothing
Return = WshShell.Run(resultat)'
Set WshShell = Nothing

Function ListTasks(strPath, fso, objTextStream)
Dim fichier,SousDossier ,Dossier ,objTextStream
   
   'Récupération du dossier
   Set Dossier = fso.GetFolder(strPath)

   'POur chaque fichier du repertoire
   For Each fichier In Dossier.Files
       'Ecrit le chemin du fichier
       Call objTextStream.WriteLine(fichier.Path)
   Next
     
   'POur Chaque Sous Dossier
   For Each SousDossier In Dossier.SubFolders
       'Ecrit le chemin du Répertoire
       Call objTextStream.WriteLine(fichier.Path)
       'appel la meme procédure pour continuer la récursivité
       Call ListTasks(SousDossier.Path, fso, objTextStream)
   Next
   
   'Desctruction du dossier
   Set Dossiers = Nothing
End Function<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 avril 2007 à 08:42
Re,
Oups petite correction sur les déclaration des variables FSO et ObjTextStream

Option Explicit

Const resultat = "C:\resultat.txt"
Dim WshShell, Path, Return, fso, objTextStream
Set WshShell = WScript.CreateObject("WScript.Shell")
Path = WshShell.ExpandEnvironmentStrings("%SystemDrive%")
Set fso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = fso.OpenTextFile(resultat, 2, True)
Call ListTasks(Path, fso, objTextStream)
objTextStream.Close
Set objTextStream = Nothing
Set fso = Nothing
Return = WshShell.Run(resultat)'
Set WshShell = Nothing

Function ListTasks(strPath, fso, objTextStream)
Dim fichier, SousDossier, Dossier
 
  'Récupération du dossier
  Set Dossier = fso.GetFolder(strPath)

  'POur chaque fichier du repertoire
  For Each fichier In Dossier.Files
      'Ecrit le chemin du fichier
      Call objTextStream.WriteLine(fichier.Path)
  Next
   
  'POur Chaque Sous Dossier
  For Each SousDossier In Dossier.SubFolders
      'Ecrit le chemin du Répertoire
      Call objTextStream.WriteLine(fichier.Path)
      'appel la meme procédure pour continuer la récursivité
      Call ListTasks(SousDossier.Path, fso, objTextStream)
  Next
 
  'Desctruction du dossier
  Set Dossiers = Nothing
End Function<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011
6 avril 2007 à 13:38
Salut,

je post de mémoire un script que j'avais fait pour parcourir toute une arborescence (pour sortir des stats sur les dates de modifications à l'origine.)

Option Explicit

Dim objfso, driveroot, result, lecteur, noms
Dim chemin

Set objfso = CreateObject("Scripting.FileSystemObject")
Set lecteur = objfso.GetDrive(" F: ") ' lecteur F à lister
Set driveroot = lecteur.RootFolder ' objet "REPERTOIRE" racine du lecteur F:
Set result = objfso.OpenTextFile("C:\resultat.txt", 2, True) ' ouverture du fichier pour résultats

arbo driveroot.Path ' lancement de la procédure récursive ci-dessus

' ************************************
Sub arbo (Byval chemin) ' procédure pour parcourir une arbo
Dim rep, fichier, folder

Set rep = objfso.GetFolder(chemin)

If rep.name <> "RECYCLER" And rep.name <> "System Volume Information" Then ' évite de bugger sur les répertoires systèmes
    For Each folder In rep.SubFolders ' Pour chaque répertoires enfant, on écrit son nom dans le fichier result, et on relance la procédure pour chaque sous dossier de ce dossier
        result.WriteLine noms
        arbo folder.Path
    Next
End If

Set rep = Nothing

End Sub
' ***********************************
result.Close

Set objfso = Nothing
Set lecteur = Nothing
Set driveroot = Nothing
Set result = Nothing
0
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011
6 avril 2007 à 13:43
petite modification :

result.WriteLine folder.Path

J'ai fait ce script de tête, donc je ne garantis pas l'efficacité à 100%
J'avais le même façon VBA pour sortir les résultats dans une feuille Excel. Si ça t'intéresse Mahelan, envoie moi un mail et je te filerai tout ça avec les explications qui vont avec. Mais bon, j'suis pas une star non plus en VB et VBA donc je ne promets pas monts et merveilles non plus...
Teteve (teteve2000@hotmail.com)
0
Rejoignez-nous