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 recursive de fichier par extension-date-heure


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut [Résolu] Recherche recursive de fichier par extension-date-heure
    Bonjour aux professionnels de l’informatique,

    Je débarque à peine dans le vbscript, alors s’il vous plait ne me tapez pas (pas encore…).
    Mon but est de :
    De rechercher récursivement dans un dossier précis tout les fichiers .jpg et .tif qui on été créés à la date d’aujourd’hui et à partir de telle heure (cette heure est indiqué dans un fichier .txt elle correspond à l’heure d’ouverture de la session utilisateur) et de me donner simplement le nombre de ces fichiers .jpg et .tif (une énumération récursive de fichiers). J'ai beau fouiller dans les forums à chaque fois il me manque une étape et je bloque complètement.
    J’ai réussi avec une commande MS-DOS (dans un .bat) de m’écrire dans un fichier .txt ça :

    Le volume dans le lecteur C s'appelle OS
    Le num‚ro de s‚rie du volume est E2A2-818A

    R‚pertoire de C:\Documents and Settings\All Users\Documents

    09.09.2009 10:28 <REP> Nouveau dossier
    09.09.2009 12:16 <REP> Tracelog
    10.09.2009 00:59 <REP> ..
    10.09.2009 00:59 <REP> .
    31.08.2009 12:04 123 logontracer.bat
    09.09.2009 01:22 123 logofftracer.bat
    10.09.2009 01:23 127 dirlist.bat
    09.09.2009 12:11 421'888 Strat‚gie de groupe.doc
    09.09.2009 12:12 291'420 Tracelog.rar
    09.09.2009 10:07 39 rapport.txt
    09.09.2009 19:40 789 logsession.txt
    10.09.2009 01:23 0 filelist.txt
    09.09.2009 01:16 520 sort.vbs
    09.09.2009 01:39 152 eraselogsessionsort.vbs
    09.09.2009 02:18 543 search.vbs
    09.09.2009 11:42 726 logontracer.vbs
    09.09.2009 11:42 726 logofftracer.vbs
    09.09.2009 18:20 1'106 Bonjour.vbs
    10.09.2009 00:30 437 dirlist.vbs
    15 fichier(s) 718'719 octets

    R‚pertoire de C:\Documents and Settings\All Users\Documents\Nouveau dossier

    09.09.2009 10:28 <REP> ..
    09.09.2009 10:28 <REP> .
    08.09.2009 21:03 1'472 insert.vbs
    1 fichier(s) 1'472 octets

    R‚pertoire de C:\Documents and Settings\All Users\Documents\Tracelog

    09.09.2009 12:16 <REP> ..
    09.09.2009 12:16 <REP> .
    0 fichier(s) 0 octets

    Total des fichiers list‚sÿ:
    16 fichier(s) 720'191 octets
    8 R‚p(s) 1'364'893'696 octets libres

    Le problème c’est que là il me donne le nombre de tous les fichiers sans exception.
    Peut être qu’on pourrait écrire un .vbs qui irait lire ce fichier en ne retenant que les .tif et .jpg correspondant à la date d’aujourd’hui et créés à partir de telle heure ou alors écrire tout ça en vbs.

    Je ne sais pas du tout comment écrire ça par où commencer, si une âme charitable puisse avoir pitié de mon cas j’en serai honoré. Je ne suis pas informaticien mais j’ai déjà réussi en deux semaines à écrire quelques scripts comme un qui me donne l’heure et la date d’ouverture et de fermeture de session de chaque utilisateur (et j’en suis si fier …..!)

  2. #2
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Salut.

    En fait la récursivité pour les systèmes de fichiers c'est pas trop chaud.
    Et trouver les infos que t'as besoin en VBS, c'est facile aussi.

    Donc petite aide par étape :

    1. La fonction récursive qui affiche les chemins de tes images et donne le nb d'images pour chaque (sous-)dossier :
    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
    Sub RechercheImg (objFolder) ' La fonction prend en paramètre un objet Dossier
      For Each objSubFolder In objFolder.SubFolders 
        RechercheImg(objSubFolder) ' Pour chaque sous-dossier, on rappelle la fonction récursive
      Next
      nbJpg = 0
      nbTif = 0
      For Each objFile In objFolder.Files 
        If Lcase(Right(objFile.Name, 4)) = ".jpg" Then 
          WScript.Echo objFile.Path 
          nbJpg = nbJpg  + 1
        ElseIf Lcase(Right(objFile.Name, 4)) = ".tif" Then
          WScript.Echo objFile.Path 
          nbTif = nbTif + 1
        End If
      Next
      WScript.Echo objFolder.Path & " : " & nbJpg  & " JPG et " & nbTif  & " TIF."
    End Sub
    2. Puis son utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set objFso = CreateObject("Scripting.FileSystemObject")
    strFolderBase = "C:\" 'Dossier de base pour la récursivité, exemple : C:
    If NOT objFso.FolderExists(strFolderBase) Then WScript.Quit 1 'Juste pour vérification, même si dans cet exemple c'est inutile
    Set objFolderBase = objFso.GetFolder(strFolderBase)
    RechercheImg (objFolderBase)
    Voilà pour la base, c'est relativement simple. Après c'est à corriger (peut-être), à améliorer (c'est sûr), et à modifier pour l'adapter à tes besoins.

    Bonne continuation

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Alors là c'est parfait, excellent ça à l'air si simple une fois qu'on l'a!
    j'ai modifié quelques lignes pour que ça m'écrive le résultat dans un fichier .txt.

    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
    Sub RechercheImg (objFolder) ' La fonction prend en paramètre un objet Dossier
      For Each objSubFolder In objFolder.SubFolders 
        RechercheImg(objSubFolder) ' Pour chaque sous-dossier, on rappelle la fonction récursive
      Next
      nbJpg = 0
      nbTif = 0
      For Each objFile In objFolder.Files 
        If Lcase(Right(objFile.Name, 4)) = ".vbs" Then 
     
          nbJpg = nbJpg  + 1
        ElseIf Lcase(Right(objFile.Name, 4)) = ".txt" Then
     
          nbTif = nbTif + 1
        End If
      Next
     
    Set Fso = CreateObject("Scripting.FileSystemObject")
      Set f = Fso.OpenTextFile("C:\Documents and Settings\All Users\Documents\rapport.txt", 8)
          f.Write (nbJpg  & " vbs et " & nbTif  & " txt." & vbnewline)
     
    End Sub
     
    Set objFso = CreateObject("Scripting.FileSystemObject")
    strFolderBase = "C:\Documents and Settings\All Users\Documents" 'Dossier de base pour la récursivité, exemple : C:
    If NOT objFso.FolderExists(strFolderBase) Then WScript.Quit 1 'Juste pour vérification, même si dans cet exemple c'est inutile
    Set objFolderBase = objFso.GetFolder(strFolderBase)
    RechercheImg (objFolderBase)
    et voilà le résultat noté dans le fichier "rapport.txt"

    1 vbs et 0 txt.
    0 vbs et 0 txt.
    8 vbs et 4 txt.

    J'aimerai si c'est possible que le script me compte seulement les fichiers de la date d'aujourd'hui et à partir d'une heure précise (heure au format 00:00:00 qui est noté à la dernière ligne du fichier "logsession.txt" à partir du caractère 22 inclus). Voici le contenu de ce fichier "logsession.txt":

    OUVERTURE 09.09.2009 11:44:22 Jean
    FERMETURE 09.09.2009 11:45:46 Jean
    OUVERTURE 09.09.2009 11:46:07 Jean
    FERMETURE 09.09.2009 15:45:33 Jean
    OUVERTURE 09.09.2009 15:45:55 Jean
    FERMETURE 09.09.2009 15:48:02 Jean
    OUVERTURE 09.09.2009 15:48:37 Jean
    FERMETURE 09.09.2009 17:08:09 Jean
    OUVERTURE 09.09.2009 17:08:26 Jean
    FERMETURE 09.09.2009 18:20:41 Jean
    OUVERTURE 09.09.2009 18:22:59 newuser
    FERMETURE 09.09.2009 18:24:47 newuser
    OUVERTURE 09.09.2009 18:25:15 Jean
    FERMETURE 09.09.2009 18:26:43 Jean
    OUVERTURE 09.09.2009 18:27:07 newuser
    FERMETURE 09.09.2009 18:27:35 newuser
    OUVERTURE 09.09.2009 18:27:52 newuser
    FERMETURE 09.09.2009 18:32:00 newuser
    OUVERTURE 09.09.2009 18:35:07 newuser
    FERMETURE 09.09.2009 18:37:37 newuser
    OUVERTURE 09.09.2009 19:40:44 Jean
    FERMETURE 10.09.2009 01:28:00 Jean
    OUVERTURE 10.09.2009 08:47:11 Jean
    FERMETURE 11.09.2009 09:18:55 Jean
    OUVERTURE 11.09.2009 09:20:19 Jean

    Je pense que ça doit sacrément compliquer le script et je ne vois pas comment raccorder l'extension du fichier à sa date et son heure de création. En tous cas mille merci pitchalov.

  4. #4
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Salut.
    Bon ben c'est cool que ça t'aie aidé à avancer!

    A mon avis, ce que tu cherches à faire n'est pas très compliqué, tu devrais y arriver en utilisant les objets de base de VBS :

    Pour lire les dates dans ton fichier, tu as toutes les infos sur le parcours d'un fichier texte dans la FAQ VBS, et un paquet de messages sur ce forum qui pourront t'aider.

    Pour récupérer les informations des dates de tes fichiers, voici quelques propriétés de l'objet File que tu peux utiliser :
    - DateCreated Property
    - DateLastAccessed Property
    - DateLastModified Property

    Enfin, il existe un certain nombre de fonctions VBS qui peuvent t'aider pour faire tes comparaisons :
    IsDate et CDate pour la transformation texte -> date
    DateDiff permet de comparer 2 dates.
    La doc VBS t'aidera à leur utilisation.

    Avec ces informations et un peu de réflexion, la réponse ne devrait pas être loin...

    Appelle à l'aide si tu n'y arrives pas.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup j'ai pu bien avancer pour la date c'est parfait.
    Alors voilà j'ai fait ce qui suit et ça marche nickel, ça me compte récursivement dans un dossier défini les fichiers .jpg et .tif d'aujourd'hui! Chui tout content. Mais c'est pas fini maintenant il faudrait que ça compte seulement les fichiers créés après l'heure (heurelogon). Cette heure est notée dans le fichier logsession.txt. Je la récupère avec ce qui est noté au début du script. Mais je n'arrive pas à faire un DateDiff ("s", heurelogon, f3) car f3 me renvoi une date et une heure et heurelogon seulement une heure. DattDiff comprend pas trop je crois.
    Le nombre de seconde renvoyé n'est pas celui que j'attend (ex: si j'ouvre ma session le 15.09.2009 à 00:16:32 et je créé un fichier tif le 15.09.2009 à 00:16:42, DateDiff me renvoi 3462134410s et pas 10s).
    Je souhaitais indiquer cette différence en seconde dans le If ligne51 (and titi>= 0) pour qu'il prenne en compte tous les fichiers tif jpg dont le temps entre heure création et heure début de session est > ou = 0, mais ça ne marche pas il me compte même les fichiers créés avant l'heure d'ouverture de la session. Est-ce que c'est possible de mettre 2 "and" à la suite comme je l'ai fait. Peut-être qu'il faut splitter le résultat de objFile.DateLastModified pour qu'il ne prenne que l'heure? là ça devient chaud, ça me donne très chaud à la tête défois, si un petit coup de pouce se faisait j'en serai bienheureux.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    'Pour récupérer l'heure d'ouverture de la session notée dans le fichier logsession.txt
    Const ForReading = 1
    Dim oFso, log
     Set oFso = CreateObject("Scripting.FileSystemObject")
      Set log = oFso.OpenTextFile("C:\Documents and Settings\All Users\Documents\logsession.txt", ForReading)
    Do While log.AtEndOfStream <> True
    r = log.ReadLine
    loop
    log.close
    ligne=r
    Dim st
    st="ligne"
    vraieheure=Mid(ligne,22,2)
    vraieminute=Mid(ligne,25,2)
    vraieseconde=Mid(ligne,28,2)
     
    heurelogon=(Timeserial(vraieheure,vraieminute,vraieseconde))
    'wscript.echo heurelogon
     
    'Pour récupérer la date d'aujourd'hui au format dd.mm.yyyy
    Function Pad2(Str)
       If Len(Str) = 1 Then
           Pad2 = "0" & Str
       Else
           Pad2 = Str
       End If
    End Function
    Function Datelogon(vsDate)
     Datelogon = Pad2(Right(Day(vsDate), 2)) & "." & Pad2(Month(vsDate)) & "." & Pad2(Year(vsDate))
    End Function
     
    daylogon = Datelogon(Now) 
    'wscript.echo daylogon
     
    'Pour compter récursivement les fichiers 
    Sub RechercheImg (objFolder) ' La fonction prend en paramètre un objet Dossier
      For Each objSubFolder In objFolder.SubFolders 
        RechercheImg(objSubFolder) ' Pour chaque sous-dossier, on rappelle la fonction récursive
      Next
      nbJpg = 0
      nbTif = 0
      For Each objFile In objFolder.Files 
    'Pour vérifier que les fichiers soit d'aujourd'hui
    f3 = objFile.DateLastModified
    toto = DateDiff ("d", daylogon, f3)
    titi = DateDiff ("s", heurelogon, f3)
    'wscript.echo f3
    'wscript.echo toto
    'wscript.echo titi
    'Pour compter tif et jpg d'aujourd'hui
        If Lcase(Right(objFile.Name, 4)) = ".jpg" and toto = 0 and titi >= 0 Then
          nbJpg = nbJpg + 1
        ElseIf Lcase(Right(objFile.Name, 4)) = ".tif" and toto = 0 and titi >= 0 Then
          nbTif = nbTif + 1
        End If
     next
    Set Fso = CreateObject("Scripting.FileSystemObject")
      Set f = Fso.OpenTextFile("C:\Documents and Settings\All Users\Documents\rapport.txt", 8)
          f.Write (nbJpg  & " jpg et " & nbTif  & " tif" & vbnewline)
    	  End Sub
     
    'Dossier de base pour la récursivité, exemple : C:	  
    Set objFso = CreateObject("Scripting.FileSystemObject")
    strFolderBase = "C:\Documents and Settings\All Users\Documents" 
    If NOT objFso.FolderExists(strFolderBase) Then WScript.Quit 1 'Juste pour vérification, même si dans cet exemple c'est inutile
    Set objFolderBase = objFso.GetFolder(strFolderBase)
    RechercheImg (objFolderBase)

  6. #6
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Je pense que ta fonction Datelogon est bien pour l'affichage, mais pas pour la comparaison des dates, car elle ne te renvoie pas un objet au format "Date", mais une String.

    Essaie comme ça, plutôt, et vois ce que ça dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    toto = DateDiff ("d", Now, f3)
    titi = DateDiff ("s", Now, f3)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Oui là en effet DateDiff arrive à calculer entre l'heure de modif et Now mais ce n'est pas ce que je cherche. je cherche a avoir la différence entre l'heure de modif des fichiers tif-jpg et l'heure d'ouverture de la session (dans logsession.txt).
    As-tu une idée lumineuse? C'est mon non anniversaire aujourd'hui!

  8. #8
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Alors comme je te l'ai dit, il faut récupérer la partie de ton fichier correspondant à la date de dernier logon, transformer la string récupérée en Date avec la fonction CDate, puis effectuer ton DateDiff entre la date de modification de ton fichier et la date récupérée.

    Le plus dur sera selon moi de récupérer la chaine de ton fichier contenant date (expression régulières, ou test de chaine avec Instr, Left, Right, etc...) et de la remettre en forme pour la transformer en date avec CDate (l'outil IsDate peut t'aider pour savoir si la conversion fonctionnera).

    Bon courage!

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    EXCELLENT ça marche ça me compte désormais tout les jpg-tif créés à partir de telle heure telle jour, c'est perfect. Je bloque maintenant pour sommer tout ça. J'arrive à lui faire écrire la somme des jpg+tif contenu dans chaque sous répertoire mais pas le total. ex: j'obtiens 1 fichiers jpg dans le répertoire 1, 3jpg-tif dans répertoire 2, et 6jpg-tif dans répertoire 3, comment obtenir 10 comme résultat.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    'Pour récupérer l'heure et la date d'ouverture de la session notée dans le fichier logsession.txt
    Const ForReading = 1
    Dim oFso, log
     Set oFso = CreateObject("Scripting.FileSystemObject")
      Set log = oFso.OpenTextFile("C:\Documents and Settings\All Users\Documents\logsession.txt", ForReading)
    Do While log.AtEndOfStream <> True
    r = log.ReadLine
    loop
    log.close
    ligne=r
    Dim st
    st="ligne"
    vraieheure=Mid(ligne,22,2)
    vraieminute=Mid(ligne,25,2)
    vraieseconde=Mid(ligne,28,2)
    vraiejour=Mid(ligne,11,2)
    vraiemois=Mid(ligne,14,2)
    vraieanne=Mid(ligne,17,4)
     
    heurelogon=(Timeserial(vraieheure,vraieminute,vraieseconde))
    jourlogon=(vraiejour & "." & vraiemois & "." & vraieanne)
    ouverturesession = jourlogon & " " & heurelogon
     
    If IsDate(ouverturesession) Then
      d = (CDate(ouverturesession))
    End If
     
    'Pour compter récursivement les fichiers 
    Sub RechercheImg (objFolder) ' La fonction prend en paramètre un objet Dossier
      For Each objSubFolder In objFolder.SubFolders 
        RechercheImg(objSubFolder) ' Pour chaque sous-dossier, on rappelle la fonction récursive
      Next
      nbJpg = 0
      nbTif = 0
      For Each objFile In objFolder.Files 
    'Pour vérifier que les fichiers ont été créé pendant la session courante
    f3 = objFile.DateLastModified
    titi = DateDiff ("s", d, f3)
    'wscript.echo f3
    'wscript.echo titi
    'Pour compter tif et jpg d'aujourd'hui
        If Lcase(Right(objFile.Name, 4)) = ".jpg" and titi >= 0 Then
          nbJpg = nbJpg + 1
        ElseIf Lcase(Right(objFile.Name, 4)) = ".tif" and titi >= 0 Then
          nbTif = nbTif + 1
        End If
     next
     total = (nbJpg + nbTif)
    'wscript.echo total
    	  Set Fso = CreateObject("Scripting.FileSystemObject")
      Set f = Fso.OpenTextFile("C:\Documents and Settings\All Users\Documents\rapport.txt", 8)
          f.Write (total & vbnewline)
    	  End Sub
     
    'Dossier de base pour la récursivité, exemple : C:	  
    Set objFso = CreateObject("Scripting.FileSystemObject")
    strFolderBase = "C:\Documents and Settings\All Users\Documents" 
    If NOT objFso.FolderExists(strFolderBase) Then WScript.Quit 1 'Juste pour vérification, même si dans cet exemple c'est inutile
    Set objFolderBase = objFso.GetFolder(strFolderBase)
    RechercheImg (objFolderBase)

  10. #10
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Salut.

    Cool que t'aies réussi.
    Pour ta question, je penserais à une variable globale que tu utiliserais dans ta fonction. C'est pas très propre car tu peux pas réutiliser ta fonction telle quelle pour d'autres scripts, mais j'ai pas d'autre idée...

    Mise en place de l'incrémentation d'une variable globale (ultra-easy) :

    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
     
     
    'Pour compter récursivement les fichiers 
    Sub RechercheImg (objFolder)
      ...
      For Each objSubFolder In objFolder.SubFolders 
        RechercheImg(objSubFolder)
      Next
      nbJpg = 0
      nbTif = 0
      For Each objFile In objFolder.Files 
        If Lcase(Right(objFile.Name, 4)) = ".jpg" and titi >= 0 Then
          nbJpg = nbJpg + 1
        ElseIf Lcase(Right(objFile.Name, 4)) = ".tif" and titi >= 0 Then
          nbTif = nbTif + 1
        End If
      Next
     
      total = (nbJpg + nbTif)
      nbImg = nbImg + total
     ...
    End Sub
    ...
    nbImg = 0
    RechercheImg (objFolderBase)
    WScript.Echo nbImg
    Je pense que ça doit marcher, ou alors on est pas loin du compte...

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Pitchalov je te tire mon chapeau: çA MARCHE, yahoooooooo

    je suis très content de ce script, donc pour conclure ce script permet de compter récursivement dans un dossier donné tous les fichiers d'une extension donnée créée à partir d'une date et d'une heure donnée (dans mon cas cette heure correspond à l'ouverture de la session windows);
    On peut donc grâce à ça savoir combien de fichiers ont été créé par un utilisateur. TROP FORT! Merci beaucoup.
    Voilà le script final

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    'Pour récupérer l'heure et la date d'ouverture de la session notée dans le fichier logsession.txt
    Const ForReading = 1
    Dim oFso, log
     Set oFso = CreateObject("Scripting.FileSystemObject")
      Set log = oFso.OpenTextFile("C:\Documents and Settings\All Users\Documents\logsession.txt", ForReading)
    Do While log.AtEndOfStream <> True
    r = log.ReadLine
    loop
    log.close
    ligne=r
    Dim st
    st="ligne"
    vraieheure=Mid(ligne,22,2)
    vraieminute=Mid(ligne,25,2)
    vraieseconde=Mid(ligne,28,2)
    vraiejour=Mid(ligne,11,2)
    vraiemois=Mid(ligne,14,2)
    vraieanne=Mid(ligne,17,4)
     
    heurelogon=(Timeserial(vraieheure,vraieminute,vraieseconde))
    jourlogon=(vraiejour & "." & vraiemois & "." & vraieanne)
    ouverturesession = jourlogon & " " & heurelogon
     
    If IsDate(ouverturesession) Then
      d = (CDate(ouverturesession))
    End If
     
    'Pour compter récursivement les fichiers 
    Sub RechercheImg (objFolder) ' La fonction prend en paramètre un objet Dossier
      For Each objSubFolder In objFolder.SubFolders 
        RechercheImg(objSubFolder) ' Pour chaque sous-dossier, on rappelle la fonction récursive
      Next
      nbJpg = 0
      nbTif = 0
      For Each objFile In objFolder.Files 
    'Pour vérifier que les fichiers ont été créé pendant la session courante
    f3 = objFile.DateLastModified
    titi = DateDiff ("s", d, f3)
    'wscript.echo f3
    'wscript.echo titi
    'Pour compter tif et jpg d'aujourd'hui
        If Lcase(Right(objFile.Name, 4)) = ".jpg" and titi >= 0 Then
          nbJpg = nbJpg + 1
        ElseIf Lcase(Right(objFile.Name, 4)) = ".tif" and titi >= 0 Then
          nbTif = nbTif + 1
        End If
     next
     total = (nbJpg + nbTif)
     nbImg = nbImg + total
    'wscript.echo total
    	  End Sub
     
    'Dossier de base pour la récursivité, exemple : C:	  
    Set objFso = CreateObject("Scripting.FileSystemObject")
    strFolderBase = "C:\Documents and Settings\All Users\Documents" 
    If NOT objFso.FolderExists(strFolderBase) Then WScript.Quit 1 'Juste pour vérification, même si dans cet exemple c'est inutile
    Set objFolderBase = objFso.GetFolder(strFolderBase)
    RechercheImg (objFolderBase)
     
    'Ecrit dans rapport.txt le total de fichiers jpg+tif de tous les dossiers
    nbImg = 0
    RechercheImg (objFolderBase)
    	  Set Fso = CreateObject("Scripting.FileSystemObject")
      Set f = Fso.OpenTextFile("C:\Documents and Settings\All Users\Documents\rapport.txt", 8)
          f.Write (nbImg & vbnewline)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche & Sauvegarde des fichiers par leurs Extensions
    Par hackoofr dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 16/02/2013, 07h22
  2. Rechercher fichier par extension
    Par Benoit_T dans le forum Langage
    Réponses: 3
    Dernier message: 06/07/2009, 16h46
  3. recherche d'un fichier par la date
    Par seb221 dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 07/02/2008, 12h40
  4. [XP] recherche dans des fichiers d'extension jsp
    Par drinkmilk dans le forum Windows XP
    Réponses: 5
    Dernier message: 20/10/2005, 08h55
  5. [apache] .htaccess -> bloquer fichiers par extensions
    Par yann_441 dans le forum Apache
    Réponses: 2
    Dernier message: 01/07/2005, 18h14

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