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

fabibi001 Messages postés 7 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 30 mars 2010 - 26 mars 2010 à 09:35
fabibi001 Messages postés 7 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 30 mars 2010 - 27 mars 2010 à 18:09
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

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 26
26 mars 2010 à 10:04
 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
0
fabibi001 Messages postés 7 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 30 mars 2010
26 mars 2010 à 12:33
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 ^
0
fabibi001 Messages postés 7 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 30 mars 2010
26 mars 2010 à 12:37
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 ^
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 26
26 mars 2010 à 12:55
 (re)bonjour fabibi001,


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




jean-marc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fabibi001 Messages postés 7 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 30 mars 2010
26 mars 2010 à 13:10
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 !!!!
0
fabibi001 Messages postés 7 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 30 mars 2010
26 mars 2010 à 13:20
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 ?
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 26
27 mars 2010 à 14:41
 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
0
fabibi001 Messages postés 7 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 30 mars 2010
27 mars 2010 à 18:09
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
0