Le web de Dominique Guebey – Bazar informatique
Page web : http://www.dg77.net/tekno/manuel/ftpbatch.htm
@echo off :: Ce traitement : :: - demande de saisir un nom de fichier (variable "fic") :: qui contient les commandes ftp à exécuter. :: - confectionne le script ftp (sorties dans un fichier script_ftp.txt). :: - puis lance un transfert ftp vers un serveur ("serveurftp.fr") :: en utilisant ce script (parametre -s) :: - le compte-rendu (log) ftp est conserve dans un fichier :: (log_ftp.txt) au lieu d'etre affiche. Dans ce log on indique :: aussi la date et l'heure de debut et de fin. :: :: Effacement de l’écran cls :: Entrer le nom (initialise la variable "fic"). set/p fic=Entrez le nom du fichier : :: ****** Preparation du script **************** :: Remarques : :: - ">" ecrase et remplace le fichier s'il existe deja ; :: - ">>" pour ajouter des lignes dans le fichier s'il existe deja ; :: - un blanc (espace) avant ">" est pris en compte (probleme :: par exemple : mot de passe faux : donc pas d'espace avant :: ">" ; :: - si ">" figure dans la chaine de caracteres a sortir, le faire :: preceder par "^". echo [Utilisateur]> script_ftp.txt echo [Motdepasse}]>> script_ftp.txt echo binary>> script_ftp.txt echo put %fic%>> script_ftp.txt echo close>> script_ftp.txt echo quit>> script_ftp.txt :: ****** Execution du transfert **************** echo %date% %time% >> log_ftp.txt ftp -i -s:script_ftp.txt serveurftp.fr >> log_ftp.txt echo %date% %time% >> log_ftp.txt :: ****** Affiche le log ************************ type log_ftp.txt | more pause
:: EXECUTE DES COMMANDES ftp :: Parametre facultatif : emplacement et nom d'un fichier :: qui contient la liste des commandes ftp à exécuter @echo off if "%1"=="" goto entree set FICEXEC=%1 goto sentree :entree :: Si rien n'est passe en parametre @echo Fichier de commandes ftp : set /P FICEXEC= if "%FICEXEC%"=="" echo *** Pas de fichier de commandes ftp if "%FICEXEC%"=="" goto :EOF :sentree if not exist %FICEXEC% echo *** Fichier de commandes ftp %FICEXEC% inexistant if not exist %FICEXEC% pause if not exist %FICEXEC% goto :EOF :: IDPSW est une variable d'environnement, elle indique le fichier qui contient :: id et mot de passe. Attention ce fichier doit se finir par un saut de ligne. :: La variable TMP indique le repertoire de travail. set SCRIPT=%TMP%script_ftp.txt set LOG=%TMP%log_ftp.txt set SVLOG=%TMP%svlog_ftp.txt :: Adresse reseau du serveur FTP set SRVFTP=88.88.88.88 :: Verification reseau :: Remarque : le -w 2000 est imperatif sinon erreur pas monitoree ping -n 1 -w 2000 "%SRVFTP%">nul IF %errorlevel% == 0 GOTO sping ECHO *** ECHO *** Probleme reseau ou serveur ftp ** ECHO *** PAUSE GOTO :EOF :sping :: Creation du script del %SCRIPT% 2>nul type %IDPSW% > %SCRIPT% 2>nul echo binary>>%SCRIPT% :: pour IBM AS/400-iSeries : :: echo namefmt '1'>> %SCRIPT% echo cd web>> %SCRIPT% copy %SCRIPT% + %FICEXEC% %TMP%divscript.txt >nul copy %TMP%divscript.txt %SCRIPT% >nul echo close>> %SCRIPT% echo quit>> %SCRIPT% echo *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- > %LOG% echo >> %LOG% 1>nul echo %date% %time% >> %LOG% ftp -i -s:%SCRIPT% %SRVFTP% >> %LOG% del %SCRIPT% 2>nul echo %date% %time% >> %LOG% if exist %SVLOG% (copy %SVLOG% + %LOG% %SVLOG% >nul) else ( copy %LOG% %SVLOG% >nul ) :: Verification codes d'erreur FTP :: "EnableDelayedExpansion" a cause du "for" setlocal EnableDelayedExpansion :: Liste des codes erreurs set listerr=501 530 550 553 :: C : 1ere chaine de la ligne lue (eventuellement le code erreur) :: R : lu dans liste des codes :: Option tokens facultative (defaut = 1) :: Variables : il faut un seul caractère FOR /F "tokens=1" %%C in (%LOG%) DO ( FOR %%R in (%listerr%) DO ( IF /I "%%C"=="%%R" (call bin\ftperr.bat %%C & GOTO :EOF) ) ) :: Autres erreurs envoi ftp find /C "Non conn" %LOG%>nul if %errorlevel%==0 set PROB=Probleme de connexion au reseau if %errorlevel%==0 goto pbftp goto okftp :pbftp type %LOG% | more echo **************** echo *** pb ftp *** echo *** %PROB% echo **************** pause goto :EOF :okftp type %LOG% | more