Forum Clubic

Script synchronisation de 2 répertoires selon la taille des fichiers

Bonjour,
j’ai besoin de faire un script pour synchroniser deux répertoires. Cette synchro est basée sur l’existence et la taille des fichiers:
si le fichier n’existe pas dans B, je le copie depuis A
si le fichier existe dans B et A, je compare la taille, si la taille diffère, je copie de A vers B.
il s’agit d’une Synchro de type ECHO donc.

Pour celà j’ai décider d’utiliser un langage simple, le DOS :] seulement je rencontre des problèmes et n’arrive pas à en trouver la cause.

@echo off
set dossier1=c:\A
set dossier2=c:\B
for /f "delims=" %%a in ('dir /b /s /o:n "%dossier1%"') do call :cmd "%%a"
pause & exit
:cmd
set fichier=%~nx1
if not exist "%dossier2%\%fichier%" copy "%dossier1%\%fichier%" "%dossier2%\%fichier%" > NUL & goto :eof
set taille1=%~z1
cd %dossier2%
for /f "delims=" %%b in ('dir /b /o:n "%dossier2%"') do set taille2=%%~zb
cd %dossier1%
if %taille1%==%taille2% copy /y "%dossier1%\%fichier%" "%dossier2%\"

la copie se fait, mais pas la vérification sur la taille lorsque la première opération de copie à eu lieu.

Sinon, si vous connaissez en langage vbs, wsh, je suis preneur. Merci

Je pense que c’est l’affectation des valeurs à tes variables taille et taille2 qui ne se font pas.
Comme tu es à l’intérieur d’une boucle FOR, l’affectation ne doit se faire qu’au sortir de la boucle.

Regarde dans l’aide de SET (SET /?) ce qui est dit au sujet de l’utilisation des expansions retardées
et n’oublie pas le setlocal enabledelayedexpansion en tête de programme

je vais jeter un coup d’œil la dessus. Merci, je reviens si je trouve la solution.