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 129 130 131 132 133 134 135 136 137 138 139 140 141
|
@echo off
chcp 28591 > nul
title %0 Script & Color 1A
setlocal enableextensions enabledelayedexpansion
set "FUNCTIONS_FILE=%~dp0..\5-Communs\Scripts\Functions.bat"
set "FTP_SEND_LOG=%~dp0..\6-Logs\FtpSend.log"
set "FTP_ERROR_LOG=%~dp0..\6-Logs\FtpError.log"
REM Variable de connection FTP
set "FTP_USER=backup"
set "FTP_PWD=backupxxxx"
set "FTP_IP=78.227.13.123"
set "FTP_PORT=21021"
set "FTP_INITIAL_DIRECTORY=/TEST/SCRIPTS/%username%/"
Rem DOSSIER LOCAL A TRANSFERER
set "FTP_FILE_TRANSFERT=D:\test\"
REM Variable de configuration du FTP
REM Permet de supprimer les information du shell (error + progresse bar)
set "SILENT_MODE=0"
Rem Durée maximale en secondes que vous autorisez à prendre toute l'opération
set /a MAX_TIME=3600*24*7
Rem Durée maximale en secondes que vous autorisez à prendre pour la connexion au serveur distant
set /a CONNECT_TIMEOUT=3600*24*1
Rem Nombre de tentative de connexion au serveur distant
set /a RETRY=50
Rem Durée en secondes entre chaque des tentatives de connexion au serveur distant
set /a RETRY_DELAY=5
Rem Durée maximale en secondes des tentatives de connexion au serveur distant soit (50 tentatives * 5 secondes * 2 car environ 2s de test)
set /a RETRY_MAX_TIME=50*5*2
Rem Pour limiter la vitesse de transmition en Mo/s (en général le client à une connexion de 900 Mo/s en upload (1000* pour mettre en Mo/s)
set /a LIMIT_RATE=1000*2000
REM Détection des répertoires et du choix des applications pour les version 32 bits ou 64 bits
if "%processor_architecture%" equ "AMD64" (
set "CURL=%~dp0..\5-Communs\Bin\Curl\curl-7.61.1_6-win64-mingw\bin\curl.exe"
) else (
set "CURL=%~dp0..\5-Communs\Bin\Curl\curl-7.61.1_6-win32-mingw\bin\curl.exe"
)
call :ftpSendFiles "%FTP_INITIAL_DIRECTORY%" "%FTP_FILE_TRANSFERT%"
exit
:ftpSendFiles
Rem Initialisation du fichier de log
call "%FUNCTIONS_FILE%" inLogFile "%FTP_SEND_LOG%" "=====================================[%date% %time:~0,2%h%time:~3,2%%time:~5,3%]====================================="
set "FTP_INITIAL_DIRECTORY=%1"
set FTP_INITIAL_DIRECTORY=!FTP_INITIAL_DIRECTORY:"=!
set "FTP_FILE_TRANSFERT=%2"
set FTP_FILE_TRANSFERT=!FTP_FILE_TRANSFERT:"=!
echo FTP_FILE_TRANSFERT: !FTP_FILE_TRANSFERT!
echo FTP_INITIAL_DIRECTORY: !FTP_INITIAL_DIRECTORY!
if "%SILENT_MODE%" equ "0" (
set "SILENT="
set "SHOW_ERROR_MODE="
) else (
set "SILENT=--silent "
set "SHOW_ERROR_MODE=--show-error "
)
Rem --silent Permet de supprimer la barre de progression et les erreurs
Rem --show-error Permet l'affichage des erreurs et aussi retourner un code erreurlevel
Rem --fail Permet de retourner un code erreur > 0
Rem --connect-timeout Durée maximale en secondes que vous autorisez à prendre la connexion de curl
Rem --max-time Durée maximale en secondes que vous autorisez à prendre toute l'opération
Rem --retry-connrefused Permet de considérez ECONNREFUSED comme une erreur
Rem --retry-delay Durée en secondes à laquel sera relancée la connexion
Rem --retry Permet de relancer la connexion sur une erreur transitoire X fois
Rem --fail-early Échec et sortie sur la première erreur de transfert détectée
Rem --ftp-create-dirs Permet de créer des répertoires manquants
Rem --trace <file> Active un dump de trace complet de toutes les données entrantes et sortantes, y compris les informations descriptives, dans le fichier de sortie donné.
Rem --trace <file> Utilisez "-" comme nom de fichier pour que la sortie soit envoyée à stdout. Utilisez "%" comme nom de fichier pour que la sortie soit envoyée à stderr.
Rem --limit-rate Permet delimiter le transfert en MB (il faudrait faire untest de bande passante pour transferer à 50% du débit du client
Rem --remote-name, -O curl -u ftpuser:ftppass -O ftp://ftp_server/dossier/
Rem --upload-file, -T "{fichier1,fichier2}" pour plusieurs fichier.
rem On met dans une variable OPTION toute les options de curl
set "OPTION=%SILENT%%SHOW_ERROR_MODE%--fail --limit-rate %LIMIT_RATE% --connect-timeout %CONNECT_TIMEOUT% --max-time %MAX_TIME% --retry-connrefused --retry-delay %RETRY_DELAY% --retry-max-time %RETRY_MAX_TIME% --retry %RETRY% --fail-early --ftp-create-dirs"
set FILE_TO_SEND=""
Rem lister les fichiers au format fichier1, fichier2, fichier3
for /R "%FTP_FILE_TRANSFERT%" %%a in ("*.*") do (
set "FILE=%%a"
Rem Pour curl on modifie les répertoires avec un double \\ c:\\test\\fichier1.txt
set FILE=!FILE:\=\\!
if "!FILES_TO_SEND!" equ "" (
set "FILES_TO_SEND=!FILE!"
) else (
set "FILES_TO_SEND=!FILES_TO_SEND!,!FILE!"
)
)
rem https://stackoverflow.com/questions/936108/how-to-script-ftp-upload-and-download
if exist "%FTP_FILE_TRANSFERT%*.*" (
echo This rep exist: %FTP_FILE_TRANSFERT%
rem [!FILES_TO_SEND!]
REM Envoi de chaque fichier sur le ftp
"%CURL%" %OPTION% -u "%FTP_USER%:%FTP_PWD%" -T "{!FILES_TO_SEND!}" "ftp://%FTP_IP%:%FTP_PORT%/%FTP_INITIAL_DIRECTORY%"
set "EXITCODE=!ERRORLEVEL!"
if "!EXITCODE!" equ "0" (
Rem On logue les infos dans un fichier
call "%FUNCTIONS_FILE%" inLogFile "%FTP_SEND_LOG%" "[%date% %time:~0,2%h%time:~3,2%%time:~5,3%] - [Status: ENVOYE] - Le(s) fichier(s) "!FILES_TO_SEND!" a été envoyé "
) else (
call "%FUNCTIONS_FILE%" inLogFile "%FTP_SEND_LOG%" "[%date% %time:~0,2%h%time:~3,2%%time:~5,3%] - [Status: ERROR(!EXITCODE!)] - Les fichiers "!FILES_TO_SEND!" n'a pas été envoyé "
)
)
call "%FUNCTIONS_FILE%" inLogFile "%FTP_SEND_LOG%"
pause
goto :eof |
Partager