IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Recherche d'un fichier


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut Recherche d'un fichier
    Bonjour à tous,

    Je suis entrain de regarder pour réaliser un script qui va avoir plusieurs tache.

    La première est de rechercher un exécutable (et c'est sur ca que je bloque)

    Le dossier d'installation du logiciel est dans c:\users\Username\AppData\Local\Apps\2.0\, à partir de la, plusieurs autres dossiers peuvent se créer automatiquement.
    Nom : Capture.JPG
Affichages : 180
Taille : 33,6 Ko
    ( A chaque mise à jour du programme) il recréer un autre dossier avec le nouveau fichier exécutable)

    L’exécutable est : "Cgi.Telefi.Client.exe"

    En premier j’essaie avec code ci-dessous d'afficher les informations de l’exécutable, mais rien ne s'affiche.

    Ou est-ce que j'ai commis mon erreur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colFiles = objWMIService.ExecQuery _
    ("Select * from CIM_DataFile where FileName ='Cgi.Telefi.Client.exe' and Drive='c:' and Path = 'Users\\Florent\\AppData\\Local\\Apps\\'")     
    For Each objFile in colFiles
    	Wscript.Echo "Access mask: " & objFile.AccessMask 
        Wscript.Echo "Archive: " & objFile.Archive 
        Wscript.Echo "Compressed: " & objFile.Compressed 
        Wscript.Echo "Compression method: " & objFile.CompressionMethod 
        Wscript.Echo "Creation date: " & objFile.CreationDate 
        Wscript.Echo "Computer system name: " & objFile.CSName 
        Wscript.Echo "Drive: " & objFile.Drive 
        Wscript.Echo "8.3 file name: " & objFile.EightDotThreeFileName 
        Wscript.Echo "Encrypted: " & objFile.Encrypted 
        Wscript.Echo "Encryption method: " & objFile.EncryptionMethod 
        Wscript.Echo "Extension: " & objFile.Extension 
        Wscript.Echo "File name: " & objFile.FileName 
        Wscript.Echo "File size: " & objFile.FileSize 
        Wscript.Echo "File type: " & objFile.FileType 
        Wscript.Echo "File system name: " & objFile.FSName 
        Wscript.Echo "Hidden: " & objFile.Hidden 
        Wscript.Echo "Last accessed: " & objFile.LastAccessed 
        Wscript.Echo "Last modified: " & objFile.LastModified 
        Wscript.Echo "Manufacturer: " & objFile.Manufacturer 
        Wscript.Echo "Name: " & objFile.Name 
        Wscript.Echo "Path: " & objFile.Path 
        Wscript.Echo "Readable: " & objFile.Readable 
        Wscript.Echo "System: " & objFile.System 
        Wscript.Echo "Version: " & objFile.Version 
        Wscript.Echo "Writeable: " & objFile.Writeable 
    Next
    Autres question: Est-il possible dans le cas ou il trouve 2 Cgi.Telefi.Client.exe qu'il me ressort le plus récent (dernière version) uniquement

    merci d'avance pour vos explications

    guigui69

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Puisque le chemin du fichier est connu, on peut tenter une autre façon de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Set objFile = GetObject("winMgmts:CIM_DataFile.Name='C:\Users\\Florent\AppData\Local\Apps\Cgi.Telefi.Client.exe'")
        Wscript.Echo "Access mask: " & objFile.AccessMask
        Wscript.Echo "Archive: " & objFile.Archive
        Wscript.Echo "Compressed: " & objFile.Compressed
        Wscript.Echo "Compression method: " & objFile.CompressionMethod
        Wscript.Echo "Creation date: " & objFile.CreationDate
        Wscript.Echo "Computer system name: " & objFile.CSName
        Wscript.Echo "Drive: " & objFile.Drive
        Wscript.Echo "8.3 file name: " & objFile.EightDotThreeFileName
        Wscript.Echo "Encrypted: " & objFile.Encrypted
        Wscript.Echo "Encryption method: " & objFile.EncryptionMethod
        Wscript.Echo "Extension: " & objFile.Extension
        Wscript.Echo "File name: " & objFile.FileName
        Wscript.Echo "File size: " & objFile.FileSize
        Wscript.Echo "File type: " & objFile.FileType
        Wscript.Echo "File system name: " & objFile.FSName
        Wscript.Echo "Hidden: " & objFile.Hidden
        Wscript.Echo "Last accessed: " & objFile.LastAccessed
        Wscript.Echo "Last modified: " & objFile.LastModified
        Wscript.Echo "Manufacturer: " & objFile.Manufacturer
        Wscript.Echo "Name: " & objFile.Name
        Wscript.Echo "Path: " & objFile.Path
        Wscript.Echo "Readable: " & objFile.Readable
        Wscript.Echo "System: " & objFile.System
        Wscript.Echo "Version: " & objFile.Version
        Wscript.Echo "Writeable: " & objFile.Writeable
    et là, cela marche.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Bonjour,

    Non le chemin n'est pas connu exactement.

    Je sais uniquement que le chemin (commun) de départ est: c:\users\Username\AppData\Local\Apps\2.0\ à partir de la il y a il y a des sous-dossier qui varie et qui contient l’exécutable.

    Exemple:
    c:\users\Username\AppData\Local\Apps\2.0\486536\aqsdnngvv\Cgi.Telefi.Client.exe
    c:\users\Username\AppData\Local\Apps\2.0\8523697\hgfxdvccd\Cgi.Telefi.Client.exe
    c:\users\Username\AppData\Local\Apps\2.0\4dfs5f88\55555578\Cgi.Telefi.Client.exe


    Et donc mon but est de retrouver l'exe "Cgi.Telefi.Client.exe" présent dans les sous dossier de "c:\users\Username\AppData\Local\Apps\2.0\"

    Est-ce réalisable ?

    guigui69

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Si la recherche du fichier exige des composants incertains du chemin, une marche de sous-répertoires est nécessaire.

    Je peux vous montrer une façon de faire (pas trop manièré comme je l'écris au fur et à mesure spécifiquement pour cet instance). J'écris à l'aide de récursion parce que ça demande moins de lignes de code. En fait, CIM_DataFile est monstrieusement grande, une recherche par récursion pourrait vite épuiser les ressources. En cas ça arrive, vous devrez le réécrire et stocker les trouvés intermédiaires dans des variables pour un fin de les réutilser.

    Code vbscript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    scomputer="."
    set svc=GetObject("winmgmts:\\" & scomputer & "\root\cimv2")
     
    'drive c:, d: etc... (no backslash)
    'basedir start with backslash \test no trailing backslash
    'filebasename xxx without extension
    'fileextension no dot
     
    drive="C:"
    basedir="\users\Username\AppData\Local\Apps\2.0"
    filebasename="Cgi.Telefi.Client"
    fileextension="exe"
     
    searchfile basedir
     
    function searchfile(basedir)
    	dim dirname, path, squery_subdir, squery_file, cdirs, odir, cfiles, ofile
     
    	dirname=drive & replace(basedir,"\", "\\")
    	path=replace(basedir,"\","\\") & "\\"
     
    	squery_file="select * from CIM_DataFile where drive=""" & drive & """ and filename=""" & filebasename & """ and path=""" & path & """"
    	if len(trim(fileextension))<>0 then
    		squery_file=squery_file & " and extension=""" & trim(fileextension) & """"
    	end if
     
    	set cfiles=svc.execquery(squery_file)
    	if cfiles.count<>0 then    'corrigé
    		for each ofile in cfiles
    			wscript.echo "object found : " & ofile.caption
    		next
    	else
    		'wscript.echo "query : " & squery_file & vbcrlf & "return empty"
    	end if
     
    	squery_subdir="ASSOCIATORS of {Win32_Directory.Name=""" & dirname & """} where AssocClass=Win32_Subdirectory ResultRole = PartComponent"
     
    	set cdirs=svc.execquery(squery_subdir)
    	if cdirs.count<>0 then
    		for each odir in cdirs
    			searchfile odir.path & odir.filename
    		next
    	end if
     
    end function
    On peut bien entendu persister les trouvés dans des variables pour s'en servir plus systèmatiquement ailleurs si nécessaire.

    Il se peut que s'en servir de filesystemobject soit plus simple et n'exige moins des ressources. Mais ce que je veux montrer c'est que wmi est tout à fait capable de le faire aussi.

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Il me semble que la ligne 28 devrait être : If cfiles.count <> 0 Then
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Merci l_autodidacte, absolument. Je vais le corriger par éditer. J'hesitais l'une ou l'autre façon à rendre la fonctionalité... finalement pas remis là proprement. Merci encore.

Discussions similaires

  1. Améliorer la recherche dans un fichier?
    Par abdmaa dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 09/05/2005, 13h09
  2. [LG]Runtime Error lors d'une recherche dans un fichier
    Par Fraynor dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2005, 22h51
  3. Rechercher dans un fichier avec emacs
    Par ggnore dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/11/2004, 10h28
  4. recherche dans un fichier xml (castor)
    Par pingoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 06/09/2004, 14h28
  5. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo