Vérifier l'existance de 4 fichiers et écraser si la date est inférieur [Résolu]

Signaler
Messages postés
16
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
8 décembre 2006
-
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
-
Bonjour, j'ai besoin d'aide pour modifier un vbScript. Le script doit vérifier l'existance de 4 fichiers en local et si ils n'existent pas les créer et si ils existent, vérifier la date de moification et l'écraser si il est inférieur.

Le script fonctionne déjà pour un fichier mais j'ai des problème à le faire fonctionner pour les 4 fichiers. merci de m'aider :)

Dim DossierServeur
Dim Fichier1
Dim Fichier2
Dim Fichier3
Dim Fichier4
Dim DossierLocal



Const OverwriteExisting = True



Set objFSO = CreateObject("Scripting.FileSystemObject")
Fichier1 = "kix32.exe"
Fichier2 = "KX16.DLL"
Fichier3 = "KX32.DLL"
Fichier4 = "KX95.dll"
DossierLocal = "%windir%"
DossierServeur = "
[file://\\serveur\sysvol\scripts
\\serveur\sysvol\scripts
]
"
 
Set objLocalFile = objFSO.GetFile(DossierLocal & Fichier1 & Fichier2 & Fichier3 & Fichier4)
dtmLocalDate = objLocalFile.DateLastModified



Set objServerFile = objFSO.GetFile(DossierServeur & Fichier1 & Fichier2 & Fichier3 & Fichier4)
dtmServerDate = objServerFile.DateLastModified



If dtmLocalDate < dtmServerDate Then
objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting
 
End If

12 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Salut,

C'est une erreur de ma part, j'avais oublier le fait que tu étais en VBScript.
Tu as juste a enleve le As String (Type de la variable FileName)
En VB6 On peut typer les variable et FileName est de ype String (chaien de caractere)
Mais en  VBScript ON ne Type PAS les variables. Donc juste a supprimer le As String

@+,   Ju£i?n
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Bonjour à tous....

Bonjour Patrin,

Je viens de voir mon erreur. La variable Date_Local était initialisée trop tôt.

Sorry.
jean-marc

Function Verif_Exist(Fichier, Path_Local)
'Vérification que File_Local existe sur Path_Server
Dim Fso         : Set Fso = CreateObject("Scripting.FileSystemObject")
If Fso.FileExists(Path_Local & Fichier) Then
   'Si le fichier existe en local, on va comparer la date avec celui du server
   Dim Date_Local  : Date_Local = Fso.GetFile(Path_Local & Fichier).DateLastModified 
   Call Compare_Date(Fichier, Date_Local, Path_Local)
   Else
   'Si le fichier n'existe pas en local, on vérifie que le fichier
   'existe sur le server, et on copie le fichier du server sur le local"
   If Fso.FileExists(Path_Server & Fichier) Then Fso.CopyFile Path_Server & Fichier, Path_Local & Fichier
End If
Set Fso = Nothing   
End function
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Salut,
Il faut essayer de comprendre ce que tu ecrit (ne le prend pas mal)

Lorsque tu ecrit

Set objLocalFile = objFSO.GetFile(DossierLocal & Fichier1 & Fichier2 & Fichier3 & Fichier4)

Enfait la chaine caractere resultant de DossierLocal & Fichier1 & Fichier2 & Fichier3 & Fichier4

sera:

DossierLocal = "%windir%kix32.exeKX16.DLLKX32.DLLKX95.dll"

Et ce fichier n'existe surement pas.
Ce que tu peux essayer est de te faire une procédure qui traite les fichier un par un

Soit la procédure suivante qui test si elle doit ou non copier

Private Sub TestFichier(FileName As String) 
Dim ObjFSO 
Dim objLocalFile 
Dim objServerFile 
Dim dtmLocalDate 
Dim dtmServerDate 
Dim DossierLocal 
Dim DossierServeur 

    DossierLocal = "%windir%" 
    DossierServeur = " \\serveur\sysvol\scripts" 

    Set ObjFSO =  CreateObject ("Scripting.FileSystemObject") 

    Set objLocalFile  = ObjFSO.GetFile(DossierLocal & FileName) 
    dtmLocalDate = objLocalFile.DateLastModified 

    Set objServerFile = ObjFSO.GetFile(DossierServeur & FileName) 
    dtmServerDate = objServerFile.DateLastModified 

    If dtmLocalDate < dtmServerDate Then 
        Call ObjFSO.CopyFile(objServerFile.Path, objLocalFile.Path) 
    End If 

End Sub 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

Et ensuite l'appel (4 fois)
Call TestFichier("kix32.exe") 
Call TestFichier("KX16.DLL") 
Call TestFichier("KX32.DLL") 
Call TestFichier("KX95.dll") 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

Je l'ai fait en VB6 mais cela ne devrait pas etre trop dur à adapter en VBS

@+,   Ju£i?n
Messages postés
16
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
8 décembre 2006

Salut Jrivet, je le prends pas mal car mon égaux est assez bas en vbscripts:) C'est pour ça que je post dans débutant. Dans le script que tu m'as fait je ne comprends pas ou le script va chercher le nom de fichier?
Voici le script que j'ai utilisé qui fonctionnait très bien. Le truc c'est qu'il vérifie l'esistance d'un répertoire et non du fichier et qu'il le fait pour un seul fichier. Est-ce que tu peux m'aider à l'éditer pour qu'il copie les 4 fichiers mentionnés plus haut?

Dim DossierServeur
Dim Fichier
Dim DossierLocal



Const OverwriteExisting = True



Set objFSO = CreateObject("Scripting.FileSystemObject")
Fichier = "fichier.txt"
DossierLocal = "%windir%"
DossierServeur = "
[file://\\serveur\
\\serveur\
]
sysvol"
If objFSO.FolderExists(DossierLocal) Then
    Set objLocalFile = objFSO.GetFile(DossierLocal & Fichier)
    dtmLocalDate = objLocalFile.DateLastModified



    Set objServerFile = objFSO.GetFile(DossierServeur & Fichier)
    dtmServerDate = objServerFile.DateLastModified



    If dtmLocalDate < dtmServerDate Then
        objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting
    End If
End If
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Salut,

Si tu utilise la procédure que je te propose tu pourras l'appeler autant defois que tu le soufaite avec un nom de fichier différent.
La seule chose que j'ai fait avec la procédure que je t'ai donné, c'est faire le teste pour un fichier passer en parametre.
Le nom FileName representant le nom du fihier dans le repertoire
(as tu essayer cette procédure?)
Si tu le souhaite je te remet le code avec des commentaires (que j'ai oublier)

Sinon tu peux copier colle ton code ci dessu pour qu il traite les quatre fichiers (mais c'est un peu moin "optimal")

Set objFSO = CreateObject("Scripting.FileSystemObject") 

DossierLocal = "%windir%" 
DossierServeur = " \\serveur\ sysvol" 
If objFSO.FolderExists(DossierLocal) Then 
    'TEST POUR LE PREMIER FICHIER
    Fichier = "NOMDUPREMIER" 

    Set objLocalFile = objFSO.GetFile(DossierLocal & Fichier) 
    dtmLocalDate = objLocalFile.DateLastModified 

    Set objServerFile = objFSO.GetFile(DossierServeur & Fichier) 
    dtmServerDate = objServerFile.DateLastModified 

    If dtmLocalDate < dtmServerDate Then 
        objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting 
    End If 

        'TEST POUR LE SECOND FICHIER
    Fichier = "NOMDUSECOND" 

    Set objLocalFile = objFSO.GetFile(DossierLocal & Fichier) 
    dtmLocalDate = objLocalFile.DateLastModified 

    Set objServerFile = objFSO.GetFile(DossierServeur & Fichier) 
    dtmServerDate = objServerFile.DateLastModified 

    If dtmLocalDate < dtmServerDate Then 
        objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting 
    End If 

    'TEST POUR LE TROISIEME FICHIER
    Fichier = "NOMDUTROISIEME" 

    Set objLocalFile = objFSO.GetFile(DossierLocal & Fichier) 
    dtmLocalDate = objLocalFile.DateLastModified 

    Set objServerFile = objFSO.GetFile(DossierServeur & Fichier) 
    dtmServerDate = objServerFile.DateLastModified 

    If dtmLocalDate < dtmServerDate Then 
        objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting 
    End If 

    'TEST POUR LE QUATRIEME FICHIER
    Fichier = "NOMDUQUATRIEME" 

    Set objLocalFile = objFSO.GetFile(DossierLocal & Fichier) 
    dtmLocalDate = objLocalFile.DateLastModified 

    Set objServerFile = objFSO.GetFile(DossierServeur & Fichier) 
    dtmServerDate = objServerFile.DateLastModified 

    If dtmLocalDate < dtmServerDate Then 
        objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting 
    End If 

End If 

 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+,   Ju£i?n
Messages postés
16
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
8 décembre 2006

C'est vrai que ton code à l'air beaucoup plus optimal. Mais je le comprends pas bien. J'utilise VBSEDIT et lorsque j'exécute ton script il bloque à la première ligne sur le as string... Vb6 je ne connais pas alors c'est certainement une connerie pour le convertir en vbs mais chu pas encore assez fort pour ça...
Private Sub TestFichier(FileName As String) 
Dim ObjFSO 
Dim objLocalFile 
Dim objServerFile 
Dim dtmLocalDate 
Dim dtmServerDate 
Dim DossierLocal 
Dim DossierServeur 

    DossierLocal =  "%windir%" 
    DossierServeur = " \\serveur\sysvol\scripts" 

    Set ObjFSO =  CreateObject ("Scripting.FileSystemObject") 

    Set objLocalFile  = ObjFSO.GetFile(DossierLocal & FileName) 
    dtmLocalDate = objLocalFile.DateLastModified 

    Set objServerFile = ObjFSO.GetFile(DossierServeur & FileName) 
    dtmServerDate = objServerFile.DateLastModified 

    If dtmLocalDate < dtmServerDate Then 
        Call ObjFSO.CopyFile(objServerFile.Path, objLocalFile.Path) 
    End If 

End Sub 
 

Call TestFichier("kix32.exe") 
Call TestFichier("KX16.DLL") 
Call TestFichier("KX32.DLL") 
Call TestFichier("KX95.dll") 
Messages postés
16
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
8 décembre 2006

Bonjour je sens qu'il ne manque pas grand chose. En fait j'ai décidé de vérifier seulement la date ed'un fichier et si elle inférieur écraser les 4 fichiers. Mais ça ne fonctionne pas. Vous pouvez me corriger? Merci

Private Sub TestFichier(FileName)
Dim ObjFSO
Dim objLocalFile
Dim objServerFile
Dim dtmLocalDate
Dim dtmServerDate
Dim DossierLocal
Dim DossierServeur


    FileName = "kix32.exe"
    DossierLocal = "C:\WINNT"
    DossierServeur = " [file://\\serveur\sysvol\\scripts\ \\serveur\sysvol\\scripts\]"


    Set ObjFSO = CreateObject("Scripting.FileSystemObject")


    Set objLocalFile = ObjFSO.GetFile(DossierLocal & FileName)
    dtmLocalDate = objLocalFile.DateLastModified


    Set objServerFile = ObjFSO.GetFile(DossierServeur & FileName)
    dtmServerDate = objServerFile.DateLastModified


    If dtmLocalDate < dtmServerDate Then
        Call ObjFSO.CopyFile(objServerFile.Path, objLocalFile.Path)
    End If


End Sub
Call TestFichier("kix32.exe")
Call TestFichier("KX16.DLL")
Call TestFichier("KX32.DLL")
Call TestFichier("KX95.dll")
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Bonjour à tous....

Bonjour Patrin et salut Julien,

Le script de Julien était bon (comme d'habitude !!!) aussi.
J'ai bien aimé la version longue (test du 1er...).
Pour Patrin:
Il faut utiliser Shell pour récupérer le conenu de la variable windir (ne pas oublier & "")
Ne pas hésiter, lors des tests, à mettre des "msgbox" à chaque début de function...
Dernièrement, j'ai contribué au script (qui d'ailleurs n'a pas été validé)
http://www.vbfrance.com/infomsg_COMPARER-FICHIERS-SUR-VBS_819248.aspx#7
qui est une variante de ce topic.

Ci-dessous le code testé avec windir et server.

A+.
jean-marc

Set WshShell = WScript.CreateObject("WScript.Shell")
Dim Path_Local : Path_Local = WshShell.ExpandEnvironmentStrings("%WinDir%") & ""



Const Path_Server  = "
[file://serveur/sysvol/scripts/
\\serveur\sysvol\scripts\
]
"             



Dim Fichier(3)
Fichier(0) = "kix32.exe"
Fichier(1) = "KX16.DLL"
Fichier(2) = "KX32.DLL"
Fichier(3) = "KX95.dll"



Dim i
For i = 0 To UBound(Fichier)
    Call Verif_Exist(Fichier(i), Path_Local)
Next
Set WshShell = Nothing



MsgBox "script terminé"



'###############################################################################
Function Verif_Exist(Fichier, Path_Local)
'Vérification que File_Local existe sur Path_Server
Dim Fso         : Set Fso = CreateObject("Scripting.FileSystemObject")
Dim Date_Local  : Date_Local = Fso.GetFile(Path_Local & Fichier).DateLastModified



If Fso.FileExists(Path_Local & Fichier) Then
   'Si le fichier existe en local, on va comparer la date avec celui du server
   Call Compare_Date(Fichier, Date_Local, Path_Local)
   Else
   'Si le fichier n'existe pas en local, on vérifie que le fichier
   'existe sur le server, et on copie le fichier du server sur le local"
   If Fso.FileExists(Path_Server & Fichier) Then Fso.CopyFile Path_Server & Fichier, Path_Local & Fichier
End If
Set Fso = Nothing   
End function



Function Compare_Date(Fichier, Date_Local, Path_Local)
Dim Fso          : Set Fso = CreateObject("Scripting.FileSystemObject")
Dim Date_Server  : Date_Server = Fso.GetFile(Path_Server & Fichier).DateLastModified



'MsgBox Path_Local & Fichier &vbCrLf& Date_Local &vbCrLf&vbCrLf&_
'       Path_Server & Fichier &vbCrLf& Date_Server &vbCrLf,,"Compare_Date(Fichier, Date_Local)"
If Date_Local < Date_Server Then Fso.CopyFile Path_Server & Fichier, Path_Local & Fichier, True
Set Fso = Nothing
End Function
Messages postés
16
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
8 décembre 2006

Salut Jmo, merci pour le script. Cependant il y a un problème lorsqu'un des fichier n'existe pas, il me retourne une erreur à la ligne 24. Si les fichiers n'existent pas j'aimerais qu'il les copie et si il existent, qu'il vérifie la date et écrase les fichiers si la date est inférieure aux fichiers du serveur...

Merci à vous tous!!! :)
Messages postés
16
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
8 décembre 2006

ça fonctionne très bien merci à vous deux vous êtes des KINGS. Est-ce que vous avez un tutorial à me suggérer afin que je puisse développer mes conaissances en vbscript?
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Bonjour à tous....

Un des posts de Julien méritait lui-aussi d'être validé !

A télécharger:
la bible référence du vbs => SCRIPT56.chm
la bible référence du wsh => WSH.chm

Sites très intéressants:
http://www.laltruiste.com/document.php?compteur=29&page=1&rep=15

msdn pour vbs, wsh et wmi
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/0a8270d7-7d8f-4368-b2a7-065acb52fc54.asp

les sites de JC BELLAMY....etc

et bien sur...moteur de recherche "vbs"
sur VBFrance et codyx

@+.
Bon courage et bonne programmation.
jean-marc
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Re,

Grand oubli.
Pour les topics relatifs au vbs =>
Vous êtes ici : Thèmes / Visual Basic 6 / Langages dérivés / VBScript

jean-marc