[Déplacé VB6 --> VBS] [VBS]

Signaler
Messages postés
2
Date d'inscription
vendredi 2 avril 2010
Statut
Membre
Dernière intervention
6 avril 2010
-
Messages postés
2
Date d'inscription
vendredi 2 avril 2010
Statut
Membre
Dernière intervention
6 avril 2010
-
Bonjour,

Je débute complètement en VBS et je cherche à afficher un message qui alerte sur la présence de fichiers de type *.doc ou *.xls dans un dossier précis (D:\Temporaire dans cet exemple).
Je suis presque au bout du code, mais je n'arrive pas en faire en sorte que celui-ci regarde aussi dans les sous-dossiers.
C'est à ce moment que j'ai besoin d'aide.

Dim i
i = 0
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2" )
Set colFiles = objWMIService.ExecQuery("Select * from CIM_DataFile where Drive= 'D:' " _
& "AND Path = '\\Temporaire\\' " _
& "AND Extension = 'doc'" _
& "OR Drive= 'D:' " _
& "AND Path = '\\Temporaire\\' " _
& "AND Extension = 'xls'" )
For Each objFile In colFiles
 i = i + 1
Next
If i = 0 Then
 MsgBox("Aucun fichier trouvé sur le bureau." )
 Else
 If i = 1 Then
  Wscript.Echo "Un seul fichier a été trouvé sur le bureau."
  Else
  If i > 1 Then
   Wscript.Echo i & " fichiers ont été trouvés sur le bureau."
  End If
 End If
End If


Ce script se contente de chercher dans D:\Temporaire, pas dans les sous-dossiers. J'ai essayé \\Temporaire\\*\\ ou \\*.*\\ mais ceci ne fonctionne pas.

Merci d'avance pour vos idées.

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Si ta requète est correcte, il manque des niveaux de parenthèses pour associer les AND ensemble :
    Set colFiles = objWMIService.ExecQuery( _
        "Select * from CIM_DataFile " & _
        " Where    (    Drive = 'D:' " & _
        "           AND Path  = '\\Temporaire\\' " & _
        "           AND Extension = 'doc') " & _
        "       OR (    Drive = 'D:' " & _
        "           AND Path  = '\\Temporaire\\' " & _
        "           AND Extension = 'xls')" )

Puisque le Drive et le Path sont identiques, il suffit de simplifier :
    Set colFiles = objWMIService.ExecQuery( _
        "Select * from CIM_DataFile " & _
        " Where Drive = 'D:' " & _
        "   AND Path  = '\\Temporaire\\' " & _
        "   AND (   Extension = 'doc' " & _
        "        OR Extension = 'xls')" )

Là encore, SQL a certains avantages quand il faut comparer un champ avec une liste :
    Set colFiles = objWMIService.ExecQuery( _
        "Select * from CIM_DataFile " & _
        " Where Drive = 'D:' " & _
        "   AND Path  = '\\Temporaire\\' " & _
        "   AND Extension In ('doc', 'xls')" )

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)
Messages postés
2
Date d'inscription
vendredi 2 avril 2010
Statut
Membre
Dernière intervention
6 avril 2010

Bonjour,

Après ce long weekend, je me replonge dans le code, merci pour cette réponse jack.
J'ai essayé ces optimisations. Pour la 1ère et la 2ème tout va bien, mais pour la 3ème j'ai une erreur "0x80041017" avec code "8041017" source "(null)".

Donc j'ai gardé la 2ème solution :
Dim i
i = 0
strComputer = "."
Set objWMIService = GetObject ( "winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2" )
Set colFiles = objWMIService.ExecQuery ( _
 " Select * from CIM_DataFile " & _
 " Where Drive = 'D:' " & _
 " AND Path  = '\\Temporaire\\' " & _
 " AND ( Extension = 'doc' " & _
 " OR Extension = 'xls') " )

For Each objFile In colFiles
 i = i + 1
Next

If i = 0 Then
 MsgBox "Aucun fichier trouvé."
 Else
 If i = 1 Then
  MsgBox "Un seul fichier a été trouvé."
  Else
  If i > 1 Then
   MsgBox i & " fichiers ont été trouvés."
  End If
 End If
End If


Ce qui est beaucoup plus propre que ce que j'avais fait.
Par contre, il me reste le problème de recherche dans les sous-dossiers du dossier "temporaire" qui ne s'effectue pas.
Une piste ?

Merci.