IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

FTP les bases


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut FTP les bases
    Bonjour à tous,

    J'essai en VBScript de créer un petit programme qui me permettra "dans un futur proche, je l'espère" d'interagir avec un serveur FTP :
    1. Lister les dossiers et sous-dossiers distants;
    2. Télécharger un fichier depuis le FTP sur mon disque dur;
    3. Télécharger un fichier depuis mon disque dur sur le FTP;
    4. Créer un dossier;
    5. Supprimer un fichier ou un dossier;
    6. Gestion d'erreurs (erreur de connexion, transfert achevé à 100%, etc.).


    J'ai bien trouvé quelques bouts de codes, mais malheureusement avec très peu de commentaire et j'avoue m'y perdre sur comment les combiner !

    J'ai compris (enfin je l'espère ) le principe:
    1. Créer un fichier txt où indiquer les requêtes FTP;
    2. Appeler par un RUN le ftp.exe intégré à Windows.


    Voici ma base de travail
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Option explicit
     
    'Déclaration des variables et constantes
    Dim objFSO
    Dim WSHShell
    Dim AdresseFTP, Login, Password
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Const StrFTP = "..."
    Const StrLogin = "..."
    Const StrPassword = "..."
     
    'Objets
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set WSHShell = CreateObject("WScript.Shell")
     
    'Création du fichier txt 
    Set objFile = objFSO.OpenTextFile(cheminFichier\CommandeFTP.txt, 2,true)
     
    with objFile 
     
    'Connexion au FTP
    .Write "open" & StFTP & vbCrLf
     
    'Login
    .Write "login" & StrLogin & vbCrLf
     
    'Pass
    .Write "pass" & StrPassword & vbCrLf
     
    'C'est ici que je ne sais pas trop quoi écrire selon mes besoins
    'J'ai crois savoir qu'il existe les attributs PUT, GET, LS, MKDIR ...
     
    'Lister les dossiers et sous-dossiers (racine ou dossier précis) distants dans un fichier txt que je vais appeler Arborescence.txt
    ??? 
     
    'Télécharger un fichier depuis le FTP sur mon disque dur (CheminSource et CheminDestination)
    ???
     
    'Télécharger un fichier depuis mon disque dur sur le FTP (CheminSource et CheminDestination)
    ???
     
    'Créer un dossier
    ???
     
    'Supprimer un fichier ou un dossier avec ses sous-dossiers
    ???
     
    'Fin de connexion FTP
    .Write "quit"
     
    'Fermeture du fichier txt			
    .Close
     
    end with
     
    'Libère la mémoire
    Set objFile = nothing
     
    'Lance le fichier txt de commandes FTP
    'Visiblement c'est également sur cette ligne de commande que l'on doit indiquer le fichier txt où les informations de retour vont s'écrire	
    WSHShell.Run "cmd /c ftp.exe -s:" & cheminFichier\CommandeFTP.txt & " > " & cheminFichier\RetourFTP.txt, 0 , True
     
    Set WSHShell= nothing
    Voici donc où j'en suis et si quelqu'un se sent l'âme pédagogue pour m'expliquer les bases et comment utiliser au mieux les fonctions put, get, etc., je l'en remercie par avance.

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Les bases du FTP sous MS-DOS

    Commande ftp => Explication de la commande ftp
    • ! => Permet de repasser au shell (ligne de commande)
    • ? => Affiche les informations d'aide locales
    • cd => Change le dossier de travail distant
    • close => Termine la session ftp
    • dir => Liste le contenu du dossier distant
    • get => Pour télécharger le dossier distant
    • help => Pour obtenir de l'aide
    • lcd => Pour changer de répertoire local
    • lls => Liste les fichiers du répertoire local
    • ls => Liste les fichiers du répertoire distant
    • mkdir => Crée un dossier sur l'ordinateur distant
    • mget => Permet de récupérer plusieurs fichiers sur la machine distante
    • mput => Permet d'envoyer des fichiers sur la machine distante
    • open => Ouverture d'une connexion ftp distante
    • prompt => Active ou désactive l'intéractivité sur les commandes suivantes
    • put => Envoie un fichier sur la machine distante
    • pwd => Donne le chemin actuel sur la machine distante
    • rename => Renomme le fichier
    • rm => Efface le fichier sur la machine distante
    • rmdir => Supprime le répertoire sur la machine distante


    Exemples : [VBS] Folder2FTPUpload


    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    Dim FTPServer,Login,Password,NomDossier,CheminDossier
    Copyright = "FolderFTPUpload © Hackoo © 2012"
     
    '**********-Trois Paramètres à modifier-*************
    FTPServer = "VotreServeurFTP"
    Login = "VotreLogin"
    Password= "VotrePassword"
    '****************************************************
     
    Call Parcourir_Dossier()
     
    sub Parcourir_Dossier()
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(0, "Veuillez choisir un dossier pour uploader son contenu"&vbcr&vbTab&Copyright, 1, "c:\Programs")
    If objFolder Is Nothing Then
        Wscript.Quit
    End If
    NomDossier = objFolder.title
    CheminDossier = objFolder.self.path
    Question = MsgBox("Vous avez Choisi le Dossier " &qq(NomDossier)& " qui se localise dans ce chemin :" &Vbcr& qq(CheminDossier)&vbcr&VbTab&VbTab&VbTab&" Continuez ?",vbYesNo + vbQuestion,"Le Dossier Choisi est "&qq(NomDossier)&" "&Copyright)
    If Question = VbYes Then
    FolderFTPUpload FTPServer,Login,Password,CheminDossier,NomDossier
    else
    wscript.Quit
    End If
    end sub
     
    Function FolderFTPUpload(sSite, sUsername, sPassword, sLocalFolder, sRemotePath) 
      Const OpenAsDefault = -2
      Const FailIfNotExist = 0
      Const ForReading = 1
      Const ForWriting = 2
     
      Set oFTPScriptFSO = CreateObject("Scripting.FileSystemObject")
      Set oFTPScriptShell = CreateObject("WScript.Shell")
      Set ws = CreateObject("wscript.Shell")
      sRemotePath = Trim(sRemotePath)
      sLocalFolder = Trim(sLocalFolder)
     
      'Vérifier si le chemin, contient des espaces. 
      'si Oui,alors nous avons besoin d'ajouter des guillemets pour s'assurer qu'il passe correctement.
     
      If InStr(sRemotePath, " ") > 0 Then
        If Left(sRemotePath, 1) <> """" And Right(sRemotePath, 1) <> """" Then
          sRemotePath =  """"&sRemotePath&""""
        End If
      End If
     
      If InStr(sLocalFolder, " ") > 0 Then
        If Left(sLocalFolder, 1) <> """" And Right(sLocalFolder, 1) <> """" Then
          sLocalFolder = """"&sLocalFolder&""""
        End If
      End If
     
     sFTPTemp = oFTPScriptShell.ExpandEnvironmentStrings("%TEMP%")
      Call ContenuDossier(CheminDossier)
     
      Set f = oFTPScriptFSO.OpenTextFile(sFTPTemp &"\ContenuDossier.txt", ForReading, OpenAsDefault)
      LireTout = f.ReadAll
      Fichier = split(LireTout,VbcrLF)
      f.Close
      'construire un fichier de configuration pour passer les commandes ftp
      sFTPScript = sFTPScript & "USER " & sUsername & vbCRLF
      sFTPScript = sFTPScript & sPassword & vbCRLF
      sFTPScript = sFTPScript & "mkdir " & sRemotePath & vbCRLF
      sFTPScript = sFTPScript & "cd " & sRemotePath & vbCRLF
      sFTPScript = sFTPScript & "binary" & vbCRLF
      sFTPScript = sFTPScript & "prompt n" & vbCRLF
      For i=LBound(Fichier) to UBound(Fichier)-1
      sFTPScript = sFTPScript & "put "& Fichier(i) & vbCRLF
      Next
      sFTPScript = sFTPScript & "quit" & vbCRLF & "quit" & vbCRLF & "quit" & vbCRLF
     
      sFTPTempFile = sFTPTemp & "\" & oFTPScriptFSO.GetTempName
      sFTPResults = sFTPTemp & "\" & oFTPScriptFSO.GetTempName
     
     'Ecrire les commandes ftp à passer dans un fichier temporaire.
      Set fFTPScript = oFTPScriptFSO.CreateTextFile(sFTPTempFile, True)
      fFTPScript.WriteLine(sFTPScript)
      fFTPScript.Close
      Set fFTPScript = Nothing
     
      oFTPScriptShell.Run "%comspec% /c FTP -n -s:" & sFTPTempFile & " " & sSite & _
      " > " & sFTPResults,0, TRUE
     
      'Vérifier le résultat du Transfert de l'upload
      Set fFTPResults = oFTPScriptFSO.OpenTextFile(sFTPResults, ForReading, _
      FailIfNotExist, OpenAsDefault)
      sResults = fFTPResults.ReadAll
      fFTPResults.Close
     
      oFTPScriptFSO.DeleteFile(sFTPTempFile)
      'oFTPScriptFSO.DeleteFile (sFTPResults)
     
      If InStr(sResults, "226") > 0 Then
        FTPUpload = True
        MsgBox "Tout les fichiers contenu dans le Dossier : " &sLocalFolder& vbcr & vbcr & " ont été uploadés avec succés !"&vbcr&  LireTout,64,"Résultat du Transfert d'Upload "&Copyright
     
      ElseIf InStr(sResults, "File not found") > 0 Then
        FTPUpload = "Error: File Not Found"
        MsgBox "Erreur : Fichier Non Trouvé ?",16,"Erreur : Fichier Non Trouvé ? "&Copyright
      ElseIf InStr(sResults, "Login authentication failed") > 0 Then
        FTPUpload = "Error: Login Failed."
        MsgBox "Login authentication a echoué !",16,"Login authentication failed ! "&Copyright
      Else
        FTPUpload = "Error: Unknown."
        MsgBox "Erreur: Inconnu ?",16,"Erreur: Inconnu ? "&Copyright
      End If
     
      Set oFTPScriptFSO = Nothing
      Set oFTPScriptShell = Nothing
    End Function
     
    sub ContenuDossier(sLocalFolder)
    Set ws = CreateObject("wscript.Shell")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    sFTPTemp = ws.ExpandEnvironmentStrings("%TEMP%")
    if fso.FileExists(sFTPTemp &"\ContenuDossier.txt") Then
      fso.DeleteFile sFTPTemp &"\ContenuDossier.txt"
    End if 
    Command ="cmd /c for %I in ("&sLocalFolder&"\*.*) do (echo ""%I"") >> "& sFTPTemp &"\ContenuDossier.txt"""
    Resultat = ws.run(command,0,True)
    End sub
     
    'c'est une fonction très partique qui sert à ajouter "les doubles quotes dans une variable" 
    Function qq(strIn) 
        qq = Chr(34) & strIn & Chr(34)
    End Function
    [HTA] File2FTPUpload avec une interface Graphique :


  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Merci hackoofr pour votre réponse.
    Je vais prendre le temps de lire attentivement le contenu de ces informations et revenir rapidement sur le forum pour vous informer si j'ai abouti ou non à ce que je souhaite faire.
    Bon week-end!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Bonjour

    Après étude des codes fournis, j'ai tenté d'envoyer un fichier sur le serveur FTP. La connexion au serveur FTP est bien établie;
    Le nom de mon fichier apparaît bien sur le serveur FTP, mais avec une taille à 0;
    Message de retour: "425 Unable to build data connection: Connection timed out";
    le script VBS ne s'arrête plus, certainement du fait qu'il n'y ait aucune action de la commande "ls".

    Voici mon code VBS simplifié
    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
    55
    56
    57
    58
     
    Option explicit
     
    'Déclaration des variables
    Dim FTPServer
    Dim Login
    Dim Password
    Dim Shell
    Dim FSO
    Dim f
    Dim StrTemp
    Dim strResults
    Dim StrLocal
    Dim StrList
     
    'Initialisation des variables
    FTPServer = "..."
    Login = "..."
    Password= "..."
    StrTemp = "C:\...\...\...\FTP.txt"
    strResults = "C:\...\...\...\RetourFTP.txt"
    StrLocal = "D:\...\...\...\..."
    StrList = "C:\...\...\...\...\list.txt"
     
    'Création objet
    Set Shell = CreateObject("WScript.Shell")
    Set FSO = CreateObject("Scripting.FileSystemObject")
     
    'Ecrire les commandes ftp à passer dans un fichier temporaire.
    Set f = FSO.CreateTextFile(StrTemp, True)
    With f
    	'Login
    	.WriteLine "USER " & Login
    	'Password
    	.WriteLine Password	
    	'Change le répertoire distant
    	.WriteLine "cd " & "/img " 
    	'Change le répertoire local avec double quote pour gérer les chemin avec espaces
    	.WriteLine "lcd " & """" & StrLocal & """" 
    	'Définit le type de transfert de fichiers au format binaire
    	.WriteLine "binary"
    	'Active ou desactive l'interactivité des commandes suivantes
    	.WriteLine "prompt n"  
    	'Upload le fichier du répertoire local
    	.WriteLine "put " & "image.gif"
            'Liste les fichiers dans le fichier txt StrList
    	.WriteLine "ls " & "/img " & """" & StrList & """"
    	'Terminer la session en cours
    	.WriteLine "QUIT" 
    	'Ferme le fichier txt temporaire
    	.Close
    End with
    Set f = Nothing
    Set FSO = Nothing
     
    'Execute le fichier temporaire
    Shell.Run "%comspec% /c FTP -n -s:" & StrTemp & " " & FTPServer & " > " & strResults,0, TRUE
    Set Shell = nothing
    et voici le résultat du fichier de réponse du serveur FTP
    Connecté à XXX.
    220 ProFTPD 1.3.4a Server (SHOPFTPD) [::ffff:XXX.XX.XX.XXX]
    ftp> USER XXX
    331 Password required for XXX

    230 User XXX logged in
    ftp> cd /img
    250 CWD command successful
    ftp> Dossier local maintenant D:\....\....\...
    ftp> lcd "D:\....\....\..."
    binary
    200 Type set to I
    ftp> Mode interactif désactivé.
    ftp> prompt n
    put image.gif
    200 PORT command successful
    425 Unable to build data connection: Connection timed out
    ftp> ls /img "C:\...\...\...\list.txt"
    200 PORT command successful
    j'ai bien tenté le changement de binary en ascii: même résultat !
    le fichier où est censé se retrouver le listing des fichiers distants est également vide.

    Une idée où je bug ?

  5. #5
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Pouvez-vous SVP m'expliquer cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WriteLine "ls " & "/img " & """" & StrList & """"

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Salut,

    Je souhaite pouvoir après avoir uploader le fichier dans le serveur FTP, éditer une nouvelle liste des fichiers présent dans le répertoire distant.

    .WriteLine "ls " & "/img " & """" & StrList & """"
    le "ls" correspond à la liste les fichiers du répertoire distant
    "/img" correspond au nom du répertoire distant où je souhaite effectuer la recherche
    """" & StrList & """" correspond au chemin du fichier txt dans lequel je souhaite enregistrer la liste des fichiers. Les """" sont pour encapsuler le chemin qui est composé de nom de dossiers et sous-dossiers avec des espaces.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. connaitre les bases qui existes
    Par nycagi dans le forum Administration
    Réponses: 13
    Dernier message: 08/06/2004, 12h29
  2. Les Bases de Données! tout un monde!!
    Par kikimnet dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/04/2004, 18h26
  3. Lister les bases
    Par Neuromancien2 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/01/2004, 09h12
  4. Réponses: 1
    Dernier message: 01/08/2002, 21h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo