' ---------------------------------------------------------- ' Script de surveillance de création ou suppression de ' fichiers dans un répertoire ' ' JC BELLAMY © 2003 ' ---------------------------------------------------------- Dim args, fso, dir Dim listefic1(),listefic2(),nf(2) Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set shell = WScript.CreateObject("WScript.Shell") Set args = Wscript.Arguments Const SW_SHOWNORMAL=1 If args.count=0 then msg= "----------------------------------------------------------------------" & VBCRLF msg=msg & "Surveillance de création ou suppression de fichiers dans un répertoire" & VBCRLF msg=msg & "JCB © 2003" & VBCRLF msg=msg & "----------------------------------------------------------------------" & VBCRLF msg=msg & "Syntaxe :" & VBCRLF msg=msg & " watchdir [ []]" & VBCRLF msg=msg & "Paramètres :" & VBCRLF msg=msg & " : Nom du répertoire à surveiller" & VBCRLF msg=msg & " NB: à encadrer par des guillemets" & VBCRLF msg=msg & " si le nom contient des espaces" & VBCRLF msg=msg & " : (facultatif) Période de scrutation en secondes" & VBCRLF msg=msg & " (1 seconde par défaut)" & VBCRLF msg=msg & " : (facultatif) Application à lancer en cas" & VBCRLF msg=msg & " de création ou suppression de fichier." & VBCRLF msg=msg & " Elle reçoit en paramètres :" & VBCRLF msg=msg & " - un indicateur de création (""C"") ou de suppression (""S"")" & VBCRLF msg=msg & " - le nom complet du fichier créé ou supprimé" & VBCRLF msg=msg & " L'application peut être un exécutable ou un script" & VBCRLF msg=msg & " (fichier batch .BAT ou .CMD ou script VBS,...)" & VBCRLF wscript.echo msg wscript.quit end if TestHost true dir=args(0) If not fso.FolderExists(dir) Then wscript.echo "Répertoire " & dir & " inexistant" wscript.quit End If If right(dir,1)<>"\" Then dir=dir & "\" periode=1 If args.count>1 Then periode=args(1) If not IsNumeric(periode) Then wscript.echo "Valeur incorrecte de période" wscript.quit End If End If appli="" If args.count>2 Then appli=args(2) wscript.echo "Surveillance du répertoire " & dir & " toutes les " & periode & " seconde(s)" wscript.echo "Taper CTRL-C pour stopper la surveilance" periode=periode*1000 exploredir 1 While true wscript.sleep periode exploredir 2 compare 1,2 compare 2,1 actualise Wend Wscript.quit '-------------------------------------------------------------------- Sub ExploreDir(i) set D=fso.GetFolder(dir) set collfic=D.Files nf(i)=collfic.count execute("redim listefic" & i & "(" & nf(i) & ")") j=0 For each F in collfic j=j+1 cmd="listefic" & i & "(" & j & ")=""" & F.name & """" execute(cmd) Next End Sub '-------------------------------------------------------------------- Sub Compare(m,n) For i = 1 To nf(m) curname1=eval("listefic" & m & "(" & i & ")") exist=false j=0 Do j=j+1 curname2=eval("listefic" & n & "(" & j & ")") If curname1=curname2 Then exist=true Loop Until exist or j=nf(n) If not Exist Then If m=1 Then action=" : suppression" flag="S" else action=" : création" flag="C" end if wscript.echo Time & " " & curname1 & action If appli<>"" Then shell.run """" & appli & """ " & flag & " """ & dir & curname1 & """",SW_SHOWNORMAL,false End If End If Next End Sub '-------------------------------------------------------------------- Sub actualise redim listefic1(nf(2)) nf(1)=nf(2) For i = 1 To nf(1) listefic1(i)=listefic2(i) Next End Sub '-------------------------------------------------------------------- 'Sous-programme de test du moteur 'Vu les sorties générées, c'est CSCRIPT (et non pas WSCRIPT) 'qui doit être utilisé de préférence Sub TestHost(force) dim rep strappli=lcase(Wscript.ScriptFullName) strFullName =lcase(WScript.FullName) i=InStr(1,strFullName,".exe",1) j=InStrRev(strFullName,"\",i,1) strCommand=Mid(strFullName,j+1,i-j-1) if strCommand<>"cscript" then If force then Init="Ce script doit être lancé avec CSCRIPT" Else Init="Il est préférable de lancer ce script avec CSCRIPT" End If rep=MsgBox(Init & VBCRLF & _ "Cela peut être rendu permanent avec la commande" & VBCRLF & _ "cscript //H:CScript //S /Nologo" & VBCRLF & _ "Voulez-vous que ce soit fait automatiquement?", _ vbYesNo + vbQuestion,strappli) if rep=vbYes then nomcmd="setscript.bat" Set ficcmd = fso.CreateTextFile(nomcmd) ficcmd.writeline "@echo off" ficcmd.writeline "cscript //H:CScript //S /Nologo" ficcmd.writeline "pause" params="" For i = 0 To nbargs-1 params=params & " " & args(i) next ficcmd.writeline chr(34) & strappli & chr(34) & params ficcmd.writeline "pause" ficcmd.close shell.Run nomcmd, SW_SHOWNORMAL,true force=true end if If force then WScript.Quit end if end sub