Recherche de fichiers multiple

[Résolu]
Signaler
Messages postés
4
Date d'inscription
mardi 23 septembre 2008
Statut
Membre
Dernière intervention
6 août 2010
-
Messages postés
4
Date d'inscription
mardi 23 septembre 2008
Statut
Membre
Dernière intervention
6 août 2010
-
Bonjour,

Plus que débutant en vbs j'essaye de mettre en place un script me permettant de chercher sur tous les disque locaux une liste de fichier d'extensions différentes.

J'ai trouvé sur le net un code qui fait fichier par fichier et je me demandait si c'était possible de l'adapter ou si je partait avec une mauvaise base (Pas un mauvais script hein ^^)

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oWshShell = CreateObject("WScript.Shell")
sDir = oWshShell.ExpandEnvironmentStrings("%temp%\dir.txt")
sFileName = "\Example.txt"

if oFSO.FileExists(sDir) then oFSO.DeleteFile(sDir)

For Each oDrive In oFSO.Drives
    if oDrive.DriveType = 2 then Search oDrive.DriveLetter
Next

Set oFile = oFSO.OpenTextFile(sDir, 1)
aNames = Split(oFile.ReadAll, VbCrLf)
oFile.Close
For Each sName In aNames
    If InStr(1, sName, sFileName, 1) > 0 then WScript.Echo sName
Next

Sub Search(sDrive)
    WScript.Echo "Scanning drive " & sDrive & ":"
    oWshShell.Run "cmd /c dir /s /b " & sDrive & ":" & sName & " >>" & sDir, 0, True
End Sub


Ma question: est il possible de l'adapter avec un fichier txt source dans lequel j'aurai une dizaine de nom de fichiers à la place du "sFileName = "\Example.txt"

J'essaye d'intégrer un truc du genre

Set lirefilestxt=oFSO.OpenTextFile(Filestxt, 1, True)

Do While Not lirefilestxt.AtEndOfStream
sName=lirefilestxt.ReadLine
Loop


Mais je n'y arrive pas.

Peut être n'est ce pas la bonne méthode, peut être y a il plus simple...

Merci de votre aide.

7 réponses

Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonsoir,


Ci-dessous un mélange fso et wmi.

Option Explicit
Const MyFile = "d:\readfile.txt" 'fichier source
Const HARD_DISK = 3

Call ReadFile

Function ReadFile()
   Dim objFso, objTextStream, strLine
   Set objFso = CreateObject("Scripting.FileSystemObject")
   'Verif fichier source contenant les fichiers à rechercher
   If objFso.FileExists(MyFile) Then
      Set objTextStream = objFso.OpenTextFile(MyFile, 1)
      strLine = Split(objTextStream.ReadAll, vbCrLf)
      objTextStream.Close
      Set objTextStream = Nothing
      Call SearchFiles(strLine)
   End if
   Set objFso = Nothing
End Function

Function SearchFiles(argFile)
   Dim strComputer, objWMIService, objDisk, objFile, colDisks, colFiles
   Dim i, strList, strFile, strExt
   strComputer = "."
   For i=0 To UBound(argFile)
       If InStr(1, argFile(i),".") Then 
          strFile = Left(argFile(i),Len(argFile(i))-Len(Mid(argFile(i), InStrRev(argFile(i), "."))))
          strExt = Mid(argFile(i), InStrRev(argFile(i), ".") + 1)
          Set objWMIService = GetObject("winmgmts:" _
              & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
          Set colDisks = objWMIService.ExecQuery _
          ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
          For Each objDisk in colDisks
              Set colFiles = objWMIService.ExecQuery _
                ("Select * from CIM_DataFile where Drive = '" &_
                         objDisk.Name & "' And FileName='" & strFile & _
                                 "' And Extension ='" &  strExt & "'") 
              For Each objFile in colFiles
                  strList = strList & vbCrLf & objFile.Name
             Next
          Next 
          Set colFiles = Nothing
          Set colDisks = Nothing
          Set objWMIService = Nothing
       End If
   Next
   MsgBox strList,,"Result"
End Function


jean-marc
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Bonjour

Je cherchais depuis longtemps à le faire et voilà que tu me donnes l'occasion d'aboutir : merci

Au lieu d'utiliser la commande dir seule ajoute un pipe avec la commande findstr
dir /c:\ *.* /s /b | findstr /G:c:\example.txt

J'ai mis dans mon fichier example.txt le nom du fichier readme.txt

Et il me trouve tous les fichier readme.txt présent sur mon disque, si cela marche pour un fichier cela marche avec plusieurs


P.S : J'avais mis comme toi un cmd /c en début de ligne et cela plantait.
Messages postés
4
Date d'inscription
mardi 23 septembre 2008
Statut
Membre
Dernière intervention
6 août 2010

Bonjour,

Merci pour ce retour.

Je me suis mal exprimé en fait je cherche à faire un script qui pourra me chercher tous les fichiers présent dans mon fichier txt.

Exemple du contenu du fichier txt en entrée:
Test.txt
Aze.exe
Qsdf.html

Etc, soit un nombre X de fichier totalement différents. Avec en retour le chemin bien sur ^^


Merci.
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
curieux je n'ai pas recu de mail comme quoi tu m'avais répondu

As tu seulement essayé de mettre

Test.txt
Aze.exe
Qsdf.html


dans c:\example.txt

mmeme si X=1 dans ce que je t'avais envoyé cela doit fonctionné avec X=3
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Donc après test je confirme
qu'il me trouve en une passe (une commande) les multiples fichiers cherchés qui se trouve dans le fichier Example.txt
Messages postés
4
Date d'inscription
mardi 23 septembre 2008
Statut
Membre
Dernière intervention
6 août 2010

Excuse je doit avoir des oeilleres, et du coup je doit passer a coté de ce que tu me dit.

Si j'ai bien compris, je remplace la commande dir ...du script plus haut par ta commande avec le findstr c'est ca? Parce que si c'est le cas cela ne fonctionne pas "chez moi".

Du coup, je ne comprend plus l'utilité de sFileName.

Sans vouloir être assisté à 100%, même si c'est la cas... pourrais tu copier ton script?

Merci.
Messages postés
4
Date d'inscription
mardi 23 septembre 2008
Statut
Membre
Dernière intervention
6 août 2010

Merci beaucoup Jean-marc pour ce script. Reste plus qu'a le décorticer et le comprendre ^^. Mais ca fonctionne du tonnerre.

Merci Loulou69 pour le temps accordé également.