cs_Patrin
Messages postés16Date d'inscriptionjeudi 14 septembre 2006StatutMembreDernière intervention 8 décembre 2006
-
9 oct. 2006 à 14:03
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 2018
-
11 oct. 2006 à 12:22
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
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 10 oct. 2006 à 09:59
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
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 11 oct. 2006 à 10:09
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
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
cs_Patrin
Messages postés16Date d'inscriptionjeudi 14 septembre 2006StatutMembreDernière intervention 8 décembre 2006 9 oct. 2006 à 15:13
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 9 oct. 2006 à 15:42
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
cs_Patrin
Messages postés16Date d'inscriptionjeudi 14 septembre 2006StatutMembreDernière intervention 8 décembre 2006 10 oct. 2006 à 09:09
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
cs_Patrin
Messages postés16Date d'inscriptionjeudi 14 septembre 2006StatutMembreDernière intervention 8 décembre 2006 10 oct. 2006 à 10:51
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
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 10 oct. 2006 à 17:41
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%") & ""
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
cs_Patrin
Messages postés16Date d'inscriptionjeudi 14 septembre 2006StatutMembreDernière intervention 8 décembre 2006 11 oct. 2006 à 09:30
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...
cs_Patrin
Messages postés16Date d'inscriptionjeudi 14 septembre 2006StatutMembreDernière intervention 8 décembre 2006 11 oct. 2006 à 10:45
ç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?