bonsoir,
tu à précisé un chemin pour la création du fichier return.txt..?
J'ai testé ca :et ca
Code : Sélectionner tout - Visualiser dans une fenêtre à part FichierRetourFTP = fso.GetSpecialFolder(2).path & "\" & fso.GetTempName
Code : Sélectionner tout - Visualiser dans une fenêtre à part FichierRetourFTP = "return.txt"
Je crois que t'on probléme n'est pas VBS mais plutôt le gestionnaire de tache...
peu-être te faut'il activer l'option "commande interactive".. tu devrai essayer direct la commande ftp .. comme te la dit cedric, et précise bien le chemin complet de tes 2 fichiers au cas ou...
une option de AT ... on doit la retrouver dans le planificateur de taches..
C:\>AT /?
La commande AT planifie l'exécution des commandes et programmes sur
l'ordinateur à une date et une heure spécifiées. Le service Planification
doit fonctionner pour utiliser la commande AT.
AT [\\ordinateur] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\ordinateur] heure [/INTERACTIVE]
[ /EVERY:date[,...] | /NEXT:date[,...]] "commande"
\\ordinateur Spécifie un ordinateur distant. Les commandes sont planifiées
sur l'ordinateur local si ce paramètre est omis.
id Identificateur (nombre) affecté à une commande
planifiée.
/DELETE Supprime une commande planifiée. Si id est omis, toutes
les commandes sur l'ordinateur sont supprimées.
/YES Utilisée pour supprimer toutes les tâches sans demande de
confirmation.
heure Heure de l'exécution de la commande.
/INTERACTIVE Permet au travail d'interagir avec le bureau de l'utilisateur
qui est connecté au moment où le travail est effectué.
/EVERY:date[,...] Exécute la commande tous les jours spécifiés de la semaine
ou du mois. Si la date est omise, le jour en cours du mois
est utilisé par défaut.
/NEXT:date[,...] Exécute la commande lors de la prochaine occurrence du jour
(par exemple, jeudi prochain). Si la date est omise, le
jour en cours du mois est utilisé par défaut.
"commande" Commande Windows NT, ou programme de commandes à exécuter.
Bonjour,
Je voulais avoir une précision sur votre script.
Par exemple:
Je voi qu'il y a 2 fois test.xls fichier local et fichier FTP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If UploadByFTP("test.xls" , "www/pro" , "test.xls") Then Msgbox "Upload du fichier OK" Else Msgbox "probleme" End If
Est ce que la fonction compare les 2 fichier pour savoir si le dl c'est bien passé?
Sinon je développe le même genre de fonction en ce moment
mais le transfert ne se fait pas.
Il me créé bien mon fichier log mais il est vide et rien ne se transfert.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 connect = rep & "commandes.txt" Set WshShell = CreateObject("WScript.Shell") retour = rep & "\result.txt" WSHShell.Run "cmd /c ftp.exe -s:" & connect & " > " & retour, 0 , True
par contre quand j'utilise juste la commande ftp et non cmd avant le transfert est ok mais dans ce cas pas de fichier log.
Serait il possible aussi que vous commentiez un peu le code car j'ai du mal a le comprendre, je ne suis pas vraiment débutant mais celui la est peu complexe je trouve.
Merci d'avance
En fait, on peut donner un nom différent entre le fichier local et celui du FTP.
Exemple : Tu veux Uploader un fichier de ton PC qui s'appelle toto.txt mais tu souhaite qu'il se nomme tata.txt sur le FTP.Qu'appelle tu le fichier "log" ? Le fichier de compte rendu FTP ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part UploadByFTP "toto.txt" , "www/pro" , "tata.txt"
Tu exécute ton script en local sur ton OC ou depuis un répertoire réseau ?
Effectivement, le code n'est pas très commenté
Voici quelques petits commentaires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 Function UploadByFTP(ByVal FichierLocal, ByVal Repertoire, ByVal FichierFTP) Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso, f_cmd, f_ret ' Initialisation de données de connexions au FTP FTP = "ftp.site.com" Login = "mon_login" Pass = "mon_mot_de_passe" Set fso = CreateObject("Scripting.FileSystemObject") ' Récuperation du nom des fichiers temporaires (Dossier Temp de Windows) FichierCommandeFTP = fso.GetSpecialFolder(2).path & "\" & fso.GetTempName FichierRetourFTP = fso.GetSpecialFolder(2).path & "\" & fso.GetTempName ' Écriture du fichier des commandes FTP Set f_cmd = fso.OpenTextFile(FichierCommandeFTP, ForWriting, True) f_cmd.Write "OPEN " & FTP & vbCrLf f_cmd.Write "" & Login & vbCrLf & Pass & vbCrLf f_cmd.Write "cd " & Repertoire & vbCrLf f_cmd.Write "put " & FichierLocal & " " & FichierFTP & vbCrLf f_cmd.Write "quit" f_cmd.Close ' Appel a FTP.exe pour exécution du fichier de commande ' L'éxécution créera le fichier de retour Set WSHShell = CreateObject("WScript.Shell") WSHShell.Run "cmd /c ftp.exe -s:" & FichierCommandeFTP & " > " & FichierRetourFTP, 0 , True ' Si le fichier de retour existe ' Si inexistant => Probleme d'execution => Retour à False UploadByFTP = False If fso.FileExists(FichierRetourFTP) Then Set f_ret = fso.OpenTextFile(FichierRetourFTP, ForReading) ' Parcour du fichier de retour à la recherche de l'indication "Transfert OK" while Not f_ret.AtEndOfStream And UploadByFTP = False ' Si une des lignes commence par "226 ", alors il n'y a pas eu de probleme lors du transfert iF Left(f_ret.ReadLine,4) = "226 " Then UploadByFTP = True End If Wend f_ret.close Set f_ret = Nothing ' Suppression du fichier de retour fso.DeleteFile FichierRetourFTP End If ' Suppression du fichier de commande FTP fso.DeleteFile FichierCommandeFTP Set WSHShell = Nothing Set fso = Nothing Set f_cmd = Nothing End Function
Merci pour ta réponse trés compléte.
Je vais mettre mon script vous pourrez peu être m'aider car je sui bloquer.
Voila un code que j'arrive a faire fonctionner
j'ai mis tous mon code mais ici le principal est la connexion au ftp le reste n'est pas important.
Donc ce script fonctionne, il envoi simplement un fichier sur le ftp et l'archive.
Ce que je voudrait faire c'est un test pour voir si le fichier a bien été transférer et si il y a un problème sur le transfert ne pas l'archiver et envoyer un mail.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 'Tester si le fichier de paie est dans le dossier ODPAIE rep = "\\serveur\d$\FTP\ODPAIE" If (Month(Now) < 10) Then mois = "0" & Month(Now) Else mois = Month(Now) End If annee = Year(Now) fic = "CONINTCO." & mois & ".smaj" Set objFSO = CreateObject("Scripting.FileSystemObject" ) If objFSO.FileExists(rep & "\" & fic) Then 'Le fichier existe, il est renomme avec un nom generique objFSO.MoveFile rep & "\" & fic , rep & "\CONINTCO.smaj" 'Il est ensuite transfere sur le serveur ASW Set WshShell = CreateObject("WScript.Shell") WSHShell.Run "ftp.exe -n -s:commandes.txt" 'Créaton du dossier d'archivage If Not objFSO.FolderExists(rep & "\" & annee) Then objFSO.CreateFolder(rep & "\" & annee) End If 'le deplacement ds l'archive est faite ds un autre script qui sera planifié quelque seconde plus tard End If
Pour cela je voulait donc récupérer le résultat de la connexion dans un fichier log pour pouvoir le traiter par la suite.
Et voici l'autre code qui ne fonctionne pas, j'ai pourtant bien respecter la synthaxe (enfin je pense) au niveau de la connexion ftp
Mais dans ce cas le transfert ne se fait pas, le fichier result.txt se crée bien mais il est vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 'Tester si le fichier de paie est dans le dossier ODPAIE rep = "\\serveur\d$\FTP\ODPAIE" If (Month(Now) < 10) Then mois = "0" & Month(Now) Else mois = Month(Now) End If annee = Year(Now) fic = "CONINTCO." & mois & ".smaj" connect = rep & "commandes.txt" Set objFSO = CreateObject("Scripting.FileSystemObject" ) If objFSO.FileExists(rep & "\" & fic) Then 'Le fichier existe, il est renomme avec un nom generique objFSO.MoveFile rep & "\" & fic , rep & "\CONINTCO.smaj" 'Il est ensuite transfere sur le serveur ASW Set WshShell = CreateObject("WScript.Shell") retour = rep & "\result.txt" connect = rep & "commandes.txt" WSHShell.Run "cmd /c ftp.exe -s:" & connect & " > " & retour, 0 , True 'Créaton du dossier d'archivage If Not objFSO.FolderExists(rep & "\" & annee) Then objFSO.CreateFolder(rep & "\" & annee) End If 'le deplacement ds l'archive est faite ds un autre script qui sera planifié quelque seconde plus tard End If
Pourriez vous m'aider?
Bonj'ai un peu avancé depuis mon dernier post.
Mes script était stocké sur un serveur et c'est surment pour cela qu'i lne s"exécutait pas bien puisque j'était en partage administratif.
De plus j'ai modifier ma variable rep en mettant le chemin relatif (juste \test)
J'ai ensuite fait une copi en local des mes script et la miracle ça marche
Le transfert et le fichier résult sont OK
Par contre j'ai donc essayer de remttre mes script sur le serveur et de prendre la main en TSE dessus pour aller les exécuter mais la rien, mais alors rien de chez rien, j'ai l'impression qu'il ne s'execute pas du tous. Pourtant en étant connecté en TSE sa devrait revenir au même que quand j'exécute les autres en local.
Quelqu'un aurai une idée?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager