mahelan
Messages postés51Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention 4 avril 2007
-
4 avril 2007 à 19:32
teteve
Messages postés123Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention23 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?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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]
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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]
teteve
Messages postés123Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention23 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
teteve
Messages postés123Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention23 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)