Le web de Dominique Guebey – Bazar informatique

Page : http://www.dg77.net/tekno/manuel/ftpbatch.htm


  D o m i n i q u e   G u e b e y    J u n g l e    Bazar informatique

Script FTP automatique

Simple batch d’initiation :
@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
Batch évolué :
:: 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