AutoIt Français

Nouveau forum : http://www.autoitscript.fr/
 
AccueilFAQRechercherS'enregistrerMembresGroupesConnexionhttp://www.autoitscript.fr

Partagez | 
 

 scruter un repertoire pour verif si le fichier est bon.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
cdx
Débutant
Débutant


Nombre de messages : 1
Date d'inscription : 24/07/2007

MessageSujet: scruter un repertoire pour verif si le fichier est bon.   2007-07-24, 17:04

Bonjour,

Je découvre aujourdhuis le logiciel AutoIt ainsi que votre Forum.
J'ai une problématique et je pense que AutoIt pourrai m'etre utile.

Voici mon problème.

J'ai sur mon Lan, plusieurs repertoires sur lequels sont stockés des fichiers. Ces fichiers vivent et sont généralement mis a jour tout les jours.
Le problème est que je n'ai pas le temp de vérifier tout les jours chaque repertoire pour voir si le contenu du repertoire contient un fichier daté du jour (à + ou - 2 jours)

j'aimerai faire un script qui me permettrait d'aller scruter un ou plusieurs repertoire et de m'alerter (email ou autre) en cas de fichiers trop ancien (2 voir 3 jours)

Du style :

TANT QUE REPERTOIRE CONTIENT FICHIER dont DATE = date du jour ou date du jour + 1 ou date du jour +2
ALORS BOUCLER
SINON
ENVOYER EMAIL à [email]toto@toto.fr[/email]



Pouvez vous m'éclairer ?

Cordialement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
sylvanie
Modérateur
Modérateur


Nombre de messages : 300
Date d'inscription : 10/03/2007

MessageSujet: Re: scruter un repertoire pour verif si le fichier est bon.   2007-07-25, 00:02

le plus simple est de monitorer la date de modif du fichier en partage, car si un de ses fichiers à été changé / créé alors celà va affecté la date de modif du répertoire parent.

voici un exple sur un dossier. Pour plusieur faudra passer par un boucle for portant soit sur les nom de rep passés par argument, ou fichier ini ...

[code]

#include <Date.au3>

$dir=".\BackUp"

$info=FileGetTime($dir)

$diff=_DateDiff ( 'D', $info[0]&"/"&$info[1]&"/"&$info[2], _NowCalcDate ( ) ) ; permet de faire un diff en jour entre 2 dates : celle de la dernière modif de dossier et maintenant

If $diff>2 Then alerte($dir)

Exit 0

Func alerte($local_dir)
ConsoleWrite($local_dir)
EndFunc
[/code]

Pour l'aspect répétition, vu le contexte, lance simplement ton exe via planificateur de tâche une fois par jour , c'est plus simple que de lui faire faire un sleep de 24h

pour le mail, si tu dispose d'un serveur smtp , tu peux passer par _INetSmtpMail
Vins83 a justement fait un post de test un peu plus bas, jettes y un oeuil
sinon pourquoi pas songer à un log incrit dans un rep partagé, autre que celui que tu monitore, sinon après une alerte ce logi va fausser ton évaluation ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Tlem
Admin
Admin


Nombre de messages : 39
Age : 49
Localisation : Bordeaux
Date d'inscription : 11/05/2007

MessageSujet: Re: scruter un repertoire pour verif si le fichier est bon.   2007-07-25, 01:11

Personnellement, pour lister les fichiers d'un répertoire et de ses sous répertoires éventuel, j'utiliserais des fonctions déja crées tel que :[code];===============================================================================
;
; Description: lists all files and folders in a specified path (Similar to using Dir with the /B Switch)
; Syntax: _FileListToArray($sPath, $sFilter = "*", $iFlag = 0)
; Parameter(s): $sPath = Path to generate filelist for
; $iFlag = determines weather to return file or folders or both
; $sFilter = The filter to use. Search the Autoit3 manual for the word "WildCards" For details
; $iFlag=0(Default) Return both files and folders
; $iFlag=1 Return both files and folders with full path
; $iFlag=2 Return Files Only
; $iFlag=3 Return Files Only with full path
; $iFlag=4 Return Folders Only
; $iFlag=5 Return Folders Only with full path
;
; Requirement(s): None
; Return Value(s): On Success - Returns an array containing the list of files and folders in the specified path
; On Failure - Returns the an empty string "" if no files are found and sets @Error on errors
; @Error=1 Path not found or invalid
; @Error=2 Invalid $sFilter
; @Error=3 Invalid $iFlag
; @Error=4 No File(s) Found
;
; Author(s): SolidSnake (Modified by mrbond007)
; Note(s): The array returned is one-dimensional and is made up as follows:
; $array[0] = Number of Files\Folders returned
; $array[1] = 1st File\Folder
; $array[2] = 2nd File\Folder
; $array[3] = 3rd File\Folder
; $array[n] = nth File\Folder
;
; Special Thanks to Helge and Layer for help with the $iFlag update
;===============================================================================
Func _FileListToArray($sPath, $sFilter, $iFlag)
Local $hSearch = "", $sFile = 0, $asFileList = ""
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If
(StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or
(StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or
(StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or
(StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2 Or $iFlag = 3 Or $iFlag = 4 Or $iFlag = 5) Then Return SetError(3, 3, "")
$hSearch = FileFindFirstFile($sPath & "\" & $sFilter)
If $hSearch = -1 Then Return SetError(4, 4, "")
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then
SetError(0)
ExitLoop
EndIf
If $iFlag = 0 Then $asFileList = $asFileList & $sFile & "|"
If $iFlag = 1 Then $asFileList = $asFileList & $sPath & "\" & $sFile & "|"
If
$iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" &
$sFile), "D") = 0 Then $asFileList = $asFileList & $sFile & "|"
If
$iFlag = 3 And StringInStr(FileGetAttrib($sPath & "\" &
$sFile), "D") = 0 Then $asFileList = $asFileList & $sPath & "\"
& $sFile & "|"
If $iFlag = 4 And
StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <>
0 Then $asFileList = $asFileList & $sFile & "|"
If
$iFlag = 5 And StringInStr(FileGetAttrib($sPath & "\" &
$sFile), "D") <> 0 Then $asFileList = $asFileList & $sPath
& "\" & $sFile & "|"
WEnd
FileClose($hSearch)
Return StringSplit(StringTrimRight($asFileList, 1) , "|")
EndFunc[/code]

Puis je récupèrerais la date de dernière modification de chaques fichiers avec ceci (Il y a plus simple, mais les autres infos peuvent servir a d'autres choses éventuellement) : [code];===============================================================================
; Function Name: _FileGetExtProp($sPath,$iProp)
; Description: Returns extended properties of a given file.
; Parameter(s): $sPath = The file from which to retrieve an extended property.
; Does not have to be fully pathed out, and can use realative path
; from @WorkingDir; i.e. "File.txt", or "..\File.txt".
; $iProp = The integer value for the property to return.
; $iProp = -1 (the default) returns all properties in a 0-based array.
; The properties are as follows:
; Name = 0
; Size = 1
; Type = 2
; DateModified = 3
; DateCreated = 4
; DateAccessed = 5
; Attributes = 6
; Status = 7
; Owner = 8
; Author = 9
; Title = 10
; Subject = 11
; Category = 12
; Pages = 13
; Comments = 14
; Copyright = 15
; Artist = 16
; AlbumTitle = 17
; Year = 18
; TrackNumber = 19
; Genre = 20
; Duration = 21
; BitRate = 22
; Protected = 23
; CameraModel = 24
; DatePictureTaken = 25
; Dimensions = 26
; Width = 27
; Height = 28
; Company = 30
; Description = 31
; FileVersion = 32
; ProductName = 33
; ProductVersion = 34
; Requirement(s): File specified in $spath must exist.
; Return Value(s): On Success returns 0-based array of properties, or string specified by $iProp.
; On Failure sets @error and @extended (see code below for details)
; @error = 1 for bad parameter, 2 for object reference failure
; Note: Will return "" for an unset property (no error).
; Author(s): Simucal (Simucal@gmail.com)
; Modified version by PsaltyDS at www.autoitscript.com/forum
; Note(s):
; 2007-04-27 Modified by PsaltyDS from Simucal's original function:
; Changed function name from _GetExtProperty to _FileGetExtProp, to group it by
; naming convention with the other _File* UDFs.
; Made optional $iProp = -1 default.
; Changed to allow $sPath without full path.
; Changed to not report empty fields as errors, returns "".
; Added more detailed @error and @extended on failure.
;===============================================================================
Func _FileGetExtProp($sPath, $iProp = -1)
Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
If FileExists($sPath) Then
$sPath = FileGetShortName($sPath, 1)
If IsInt($iProp) And $iProp >= -1 And $iProp <= 34 Then
$sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
$sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))
$oShellApp = ObjCreate("shell.application")
If IsObj($oShellApp) Then
$oDir = $oShellApp.NameSpace ($sDir)
If IsObj($oDir) Then
$oFile = $oDir.Parsename ($sFile)
If IsObj($oFile) Then
If $iProp = -1 Then
Local $aProperty[35]
For $i = 0 To 34
$aProperty[$i] = $oDir.GetDetailsOf ($oFile, $i)
Next
Return $aProperty
Else
$sProperty = $oDir.GetDetailsOf ($oFile, $iProp)
Return $sProperty
EndIf
Else
Return SetError(2, 2, 0) ; Failed to get file object
EndIf
Else
Return SetError(2, 1, 0) ; Failed to get directory object
EndIf
Else
Return SetError(2, 0, 0) ; Failed to create shell app
EndIf
Else
Return SetError(1, 1, 0) ; $iProp is not integer, or out of range
EndIf
Else
Return SetError(1, 0, 0) ; file does not exist
EndIf
EndFunc ;==>_FileGetExtProp[/code]

On fait la différence entre la date en cours et la date de modification(_DateDiff), et si > 2 jours alors on inscrit le nom, la date de dernière modification ect ... dans un fichier ou une Array, puis envois par mail du fichier ou de la liste complète des fichier avec ceci :

[code]Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
#Include

; Variables
$s_SmtpServer = "MailServer" ; address for the smtp-server to use - REQUIRED
$s_FromName = "Name" ; name from who the email was sent
$s_FromAddress = "your@Email.Address.com" ; address from where the mail should come
$s_ToAddress = "your@Email.Address.com" ; destination address of the email - REQUIRED
$s_Subject = "Userinfo" ; subject from the email - can be anything you want it to be
$as_Body = "" ; the messagebody from the mail - can be left blank but then you get a blank mail
$s_AttachFiles = "" ; the file you want to attach- leave blank if not needed
$s_CcAddress = "CCadress1@test.com" ; address for cc - leave blank if not needed
$s_BccAddress = "BCCadress1@test.com" ; address for bcc - leave blank if not needed
$s_Username = "******" ; username for the account used from where the mail gets sent - REQUIRED
$s_Password = "********" ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = 25 ; port used for sending the mail
$ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465 ; GMAIL port used for sending the mail
;~ $ssl=1 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
;

Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
SetError(1)
return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $Ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Sent the Message
$objEmail.Send
if @error then
SetError(2)
return $oMyRet[1]
EndIf
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
$HexNumber = Hex($oMyError.number, 8)
$oMyRet[0] = $HexNumber
$oMyRet[1] = StringStripWS($oMyError.description,3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
SetError(1); something to check for when this function returns
Return
EndFunc ;==>MyErrFunc [/code]

_________________
Le [b]"ça ne marche pas"[/b] est une conséquence commune découlant de beaucoups trops de raisons potentielles ...

Salutations.
Thierry
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: scruter un repertoire pour verif si le fichier est bon.   Aujourd'hui à 10:39

Revenir en haut Aller en bas
 
scruter un repertoire pour verif si le fichier est bon.
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» créer un sous domaine / sous repertoire pour mon domaine forumactif!?
» un logiciel pour mac?
» Demande d'Aide pour créer un fichier gpx et gpi pour GARMIN sur Plovdiv
» convertir avi en dvd
» [résolu]Affichage des POI sur nuvi 3590

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
AutoIt Français :: AutoIt v3 :: Entraide-
Sauter vers: