@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