[VBS] Vérification automatique de la mise à jour d'un fichier

Signaler
Messages postés
7
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
30 mars 2010
-
Messages postés
7
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
30 mars 2010
-
Bonjour le forum,

Voici mon problème.

Je cherche un moyen de voir automatique quand un fichier est mis à jour.

En clair, mon fichier est toujours le même mais la date d'enregistrement change normalement tous les jours car le fichier est écrasé par un nouveau, chaque jour.

Je souhaiterais savoir s'il est possible de mettre en place un script que je lance le matin en arrivant et qui va checker de lui-même toutes les 15 min et ensuite qui me prévient quand le fichier est updaté.

Pensez-vous que cela soit possible ?

8 réponses

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


Exemple à adapter.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" &_
                    "{impersonationLevel=impersonate}!\" &_
                    strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceModificationEvent WITHIN 15 WHERE " _
& "TargetInstance ISA 'CIM_DataFile' and " _
& "TargetInstance.Name='F:\\SCRIPTS\\Fichiers\\test.txt'")


Do
Set objLatestEvent = colMonitoredEvents.NextEvent
MsgBox  "File: " & objLatestEvent.TargetInstance.Name &vbCrLf&_
        "Size: " & objLatestEvent.TargetInstance.FileSize &vbCrLf&_
        "Date: " & objLatestEvent.TargetInstance.LastModified 
Set objLatestEvent = Nothing
Loop
Set objWMIService = Nothing
Set colMonitoredEvents = Nothing



jean-marc
Messages postés
7
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
30 mars 2010

Whouawwwww !!!!

Merciiiiiiiiiiiii Jean-marc !!!

Je viens de modifier le script mais j'ai un message "windows script host" qui me dit "Line6 - Char 1" - "Error : unparsable query"^.

Sais-tu ce qui coince ?


strComputer = "."
Set objWMIService = GetObject("winmgmts:" &_
"{impersonationLevel=impersonate}!\" &_
strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceModificationEvent WITHIN 15 WHERE " _
& "TargetInstance ISA 'CIM_DataFile' and " _
& "TargetInstance.Name='Q:\Brolekot\test.txt'")


Do
Set objLatestEvent = colMonitoredEvents.NextEvent
MsgBox "File: " & objLatestEvent.TargetInstance.Name &vbCrLf&_
"Size: " & objLatestEvent.TargetInstance.FileSize &vbCrLf&_
"Date: " & objLatestEvent.TargetInstance.LastModified
Set objLatestEvent = Nothing
Loop
Set objWMIService = Nothing
Set colMonitoredEvents = Nothing ^
Messages postés
7
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
30 mars 2010

Whouawwwww !!!!

Merciiiiiiiiiiiii Jean-marc !!!

Je viens de modifier le script mais j'ai un message "windows script host" qui me dit "Line6 - Char 1" - "Error : unparsable query"^.

Sais-tu ce qui coince ?

EDIT : sorry je savais pas qu'on piuvait quoter spécifiquement le VBS

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" &_ 
"{impersonationLevel=impersonate}!\" &_ 
strComputer & "\root\cimv2") 

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ 
("SELECT * FROM __InstanceModificationEvent WITHIN 15 WHERE " _ 
& "TargetInstance ISA 'CIM_DataFile' and " _ 
& "TargetInstance.Name='Q:\Brolekot\test.txt'") 


Do 
Set objLatestEvent = colMonitoredEvents.NextEvent 
MsgBox "File: " & objLatestEvent.TargetInstance.Name &vbCrLf&_ 
"Size: " & objLatestEvent.TargetInstance.FileSize &vbCrLf&_ 
"Date: " & objLatestEvent.TargetInstance.LastModified 
Set objLatestEvent = Nothing 
Loop 
Set objWMIService = Nothing 
Set colMonitoredEvents = Nothing ^
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 (re)bonjour fabibi001,


"TargetInstance.Name='Q:\\
Brolekot\\
test.txt'")




jean-marc
Messages postés
7
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
30 mars 2010

Re Jean-Marc,

Merci, effectivement, ça marche mieux comme ça.

MAIS ... j'ai un soucis, c'est que le message revient toutes les 10 secondes à l'écran :/

Y a-t-il moyen qu'il vérifie toutes les 15 minutes si le fichier a changé MAIS qu'une fois que j'ai reçu le message et cliqué sur OK, il arrête la vérification ?

Encore merci !!!!
Messages postés
7
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
30 mars 2010

Tiens, c'est bizarre, on dirait qu'il vérifie toutes les 15 SECONDES :s

Et si je ne clique pas sur OK, il "entasse" les messages les uns derrières les autres (du coup, si je pars 2 min, je dois cliquer 8 fois sur OK ...)

Une autre constation, est-ce qu'il vérifie bien que le fichier a été modifié ?
J'ai l'impression, qu'il m'affiche toutes les 15 sec, le fichier et des infos concernant celui-ci mais qu'aucune vérification n'est faite sur la date de modification du fichier.

Peut-être que ce n'est pas possible et qu'il faudrait "tout simplement" faire une vérification sur la date de création (ou de modification) du fichier et si celle-ci est égale à la date du jour, alors afficher un message box ?
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour,


Effectivement, une vérif de la date dans une boucle suffit.

Exemple pour tester toutes les 15' pendant 2 heures:

Option Explicit

Const cstFile = "D:\Test.txt"
Const cstWaitHour = 2

Dim objFso, objFile 
Dim curTime, Flag

curTime = Now
Flag = 0

Set objFso = CreateObject("Scripting.FileSystemObject")

Do While Abs(DateDiff("h", curTime, Now)) < cstWaitHour
   If objFso.FileExists(cstFile) Then
      Set objFile = objFso.GetFile(cstFile)
      If DatePart("d",objFile.DateLastModified) = DatePart("d",Date) Then 
         Flag = 1
         'call function file found
         '....
         Exit Do
      End If
   End If
   WScript.Sleep(900000) 'wait 15 minutes
Loop
If Flag = 0 Then MsgBox "File of day not found"
Set objFile = Nothing
Set objFso = Nothing



jean-marc
Messages postés
7
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
30 mars 2010

Bonjour Jean-Marc,

Alors là, je suis sur mon c*l.

Franchement je suis bluffé.

Comment arrivez-vous à des tels résultats ?

As-tu un conseil à me donner pour débuter et progresser dans VBS ?

Je ne suis pas informaticien mais j'avoue avoir un faible pour tout ce qui peut être réalisé par le PC. Je trouve que VBS permet pas mal de chose et qu'énormément de gens ignorent (il pourrait faire économiser pas mal de temps à bcp de gens).

Par quoi dois-je commencer pour bien débuter en VBS ?

Encore merci pour le temps que tu m'as consacré et les réponses que j'ai obtenues.

Chapeau et merci !

NB : Il est fort probable que je revienne de temps en temps car une fois que j'ai des réponses à mes questions, souvent, je veux aller encore plus loin et je m'en pose d'autres