Le Blog de Richard Goutorbe, consultant informatique à Montpellier  Le Blog de Richard Goutorbe, consultant informatique à Montpellier
http://www.montpellier-informatique.com/blog

Index

.

Code BAT - Recevoir un fichier par FTP dans un fichier batch de Windows

Sous Windows, on peut automatiser la réception de fichiers par FTP dans un fichier batch. La solution que je propose utilise la commande FTP native de Windows, et gère les erreurs de transmission. Le script FTP_GET.BAT a été testé sous Windows XP Professionnal et sous Windows Vista.

Fichier batch FTP_GET.BAT :

@echo off rem --------------------------------------------------------------------------- rem - BATCH : FTP_GET.BAT rem - ROLE : RECEVOIR DES FICHIERS PAR FTP rem - VERSION : 1.1 du 06-06-2009 rem - HOME PAGE : http://www.montpellier-informatique.com/ rem --------------------------------------------------------------------------- rem - rem - PARAMETRES : rem - Serveur FTP source rem - User rem - Password rem - Mode: asci/bin rem - Chemin du dossier source (sur le serveur) rem - Chemin du dossier cible (local) rem - masque des fichiers à recevoir rem - rem - VALEUR DE RETOUR : rem - RETVAL = 0 si OK, ou 1 sur erreur rem ----------------------------------------------------------------------------

   set v_FTP_ADR=%1
   set v_FTP_USR=%2
   set v_FTP_PWD=%3
   set v_FTP_MODE=%4
   set v_REP_SRC=%5
   set v_REP_DEST=%6
   set v_FIC_SRC=%7

   set v_REP_TMP=%TMP%
   set v_FIC_CMD=%v_REP_TMP%\FTP_GET_%RANDOM%.tmp
   set v_FIC_RES=%v_REP_TMP%\FTP_GET_%RANDOM%.tmp

rem ---------------------------------------------------------------------------- echo %0 %* rem ----------------------------------------------------------------------------

   echo open %v_FTP_ADR%                > %v_FIC_CMD%
   echo user %v_FTP_USR% %v_FTP_PWD%   >> %v_FIC_CMD%
   echo %v_FTP_MODE%                   >> %v_FIC_CMD%
   echo cd   %v_REP_SRC%               >> %v_FIC_CMD%
   echo lcd  %v_REP_DEST%              >> %v_FIC_CMD%
   echo mget %v_FIC_SRC%               >> %v_FIC_CMD%
   echo by                             >> %v_FIC_CMD%

   FTP.EXE -i -n -v < %v_FIC_CMD%       > %v_FIC_RES%

   FIND "Transfer complete"               %v_FIC_RES% >NUL
   IF NOT ERRORLEVEL 1 GOTO :SUITE

   GOTO :ERR_BATCH

rem ---------------------------------------------------------------------------- rem - Suppression des fichiers temporaires rem ---------------------------------------------------------------------------- :SUITE

   del %v_FIC_CMD%
   del %v_FIC_RES%

   SET RETVAL=0
   GOTO :FIN_BATCH

rem ---------------------------------------------------------------------------- rem - Gestion des erreurs rem ---------------------------------------------------------------------------- :ERR_BATCH

   echo Erreur a la reception des fichiers %v_REP_SRC%\%v_FIC_SRC%
   type %v_FIC_RES%
   SET RETVAL=1

:FIN_BATCH

Utilisation du script FTP_GET.BAT

Il faut lui passer les arguments suivants:

  1. Serveur FTP source; exemple: ftp.myhost.com
  2. Utilisateur (ftp username); exemple: dupont
  3. Mot de passe (ftp password); exemple: xxxxx
  4. Mode de transmission: "bin" ou "ascii"
  5. Chemin du dossier source (sur le serveur ftp); exemple: /public
  6. Chemin du dossier cible (path local qui contient le fichier à recevoir); exemple: C:\download
  7. Fichier(s) à recevoir: le nom d'un fichier, ou le masque des fichiers à recevoir. Le ou les fichiers spécifiés sont contenus dans le dossier donné en argument 5. Exemples: myfile.xml ou myfile*.*

Exemple d'utilisation à la ligne de commande:

        C:\> FTP_GET.BAT  ftp.myhost.com  dupont  xxxxx  bin  /public  C:\download  myfile.xml

reçoit le fichier /public/myfile.xml du serveur ftp.myhost.com, en mode binaire, dans le répertoire local C:\download

Exemple d'utilisation dans un fichier batch:
Quand on appelle FTP_GET.BAT dans un fichier batch, il est utile de vérifier que le transfert s'est déroulé sans erreurs avant de continuer les traitements. On le fait très simplement en testant la valeur de la variable d'environnement RETVAL, qui est mise à jour par FTP_GET en sortie:

  • si RETVAL = 0 : transfert a réussi
  • si RETVAL = 1 : le transfert a échoué

set SRCDIR=/public set TRG=C:\download set FTPHOST=ftp.myhost.com set FTPUSR=dupont set FTPASS=xxxxx

:STEP1 set FILE=myfile1.xml call FTP_GET.BAT %FTPHOST% %FTPUSR% %FTPASS% bin %SRCDIR% %TRG% %FILE% if %RETVAL% EQU 0 GOTO STEP2

	echo Echec de la reception du fichier %FILE%
	pause

:STEP2 set FILE=myfile2.xml call FTP_GET.BAT %FTPHOST% %FTPUSR% %FTPASS% bin %SRCDIR% %TRG% %FILE% if %RETVAL% EQU 0 GOTO STEP3

	echo Echec de la reception du fichier %FILE%
	pause

:STEP3 rem suite du traitement...

Pour faire l'opération inverse, lire Envoyer un fichier par FTP dans un fichier batch de Windows

 
Page last modified on June 06, 2009, at 10:06 AM