Script batch incorrect :(
Fermébrucine Messages postés 18721 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 24 janvier 2025 - 28 avril 2023 à 09:45
- Script batch incorrect :(
- Script vidéo youtube - Guide
- Fichier batch - Guide
- Batch pause 10 secondes ✓ - Forum Programmation
- Ghost script - Télécharger - Polices de caractères
- Microsoft activation script - Accueil - Windows
101 réponses
23 mars 2023 à 12:02
C'est franchement génial, tout marche.
@echo off CHCP 65001 >NUL SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" echo ^[93mSAUVEGARDE THUNDERBIRD[0m :DIFF FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i IF %diff% EQU 0 GOTO NOCOPY echo: ECHO Taille hors fichiers de configuration: ECHO -------------------------------------- FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets echo: echo ^[31mDifférence = %diff1% octets[0m echo: CHOICE /C ON /M "Procéder à la sauvegarde?" IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT echo: :COPY echo: ECHO Fichiers à copier: ECHO ------------------ FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%orig%" "%dest%" /L /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS echo: ROBOCOPY "%orig%" "%dest%" /MIR /NP /NJH /NDL /NFL /NJS echo ^[32mSauvegarde effectuée le %date%[0m echo: pause :PROCESS ECHO %size% %name% GOTO END :NOCOPY echo: echo ^[32mSynchronisation inutile[0m echo: pause GOTO END :QUIT echo: echo ^[32mSortie sans sauvegarde[0m echo: pause :END
Grace à tes propositions, j'ai pu adapter le script à mes besoins.
J'ai enlevé l'exclusion des json. J'ai choisi de faire une copie "effective" si Oui (j'en prends le risque car je fais une copie manuelle de la source autre part en cas de ratage du script)
Si j'ai bien compris, vu la copie ultrarapide quand je répond O, la commande ROBOCOPY (suivie de ses conditions) ne copiera que les fichiers ajoutés ou différents ??
On y est presque. Au "presque" je te vois réagir en te disant que, bon sang, on n'en aura jamais fini avec ce foutu "Script batch incorrect :(" -> :)
C'est idiot mais j'y tiens, quelles lignes dois-je ajouter avant :
* "echo ^[32mSynchronisation inutile[0m"
* "echo ^[32mSauvegarde effectuée le %date%[0m"
pour qu'il m'affiche :
Source.... = x xxx xxx xxx octets
Sauvegarde = x xxx xxx xxx octets
même si les tailles sont identiques ?
Ce serait 1 moyen rassurant pour moi de vérifier si orig et dest sont de même valeur à l'octet près...
Et peut on supprimer l'affichage de "Fichiers à copier:" qui subsiste mais ne me sert pas vraiment, puisque l'intégralité des fichiers est tenu en compte dans l'opération de copie ?
23 mars 2023 à 16:53
Si c'est pas top ça ??
Je comprends maintenant "ceintures et bretelles" comme tu dis, car en cas d'abandon de copie, il me répète les tailles, alors que c'est inutile. Par contre, le fait qu'il me les restitue après copie est TOP car il montre bien une équivalence, donc qu'il a fait le boulot...
Je suis obligé d'ajouter manuellement tous les "petits carrés" avant entre chaque ^ et [xm pour avoir la couleur, car quelque soit la langue choisie pour" l'insertion d'un extrait de code" sur ce site, il les zappe systématiquement. Donc, les "zoulies" couleurs que tu as pris l'initaitive d'incorporer sont + que "zoulies" pour moi, car très utiles pour la lecture et renforcent ainsi l'ergonomie de ce script. Merci
Très franchement, ce confort de 2.64ko de script, paramétrable à loisir, comparé aux nombreux softs de backup que j'ai pu tester.... Quand je veux faire un vrai backup complet de mon système, je fais 1 image disque avec Acronis, mais pas tous les 15j..
Tu as eu la patience de résoudre ce souci, et franchement, ça va + loin que je l'espérais, alors un grand MERCI.
@echo off
CHCP 65001 >NUL
SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release"
SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release"
REM SET "orig=G:\photos\antibes"
REM SET "dest=C:\Users\brucine\Desktop\antibes"
echo ^[93mSAUVEGARDE THUNDERBIRD[0m
:AVANT
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a
FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b
FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e
FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i
echo:
ECHO ^[34mTaille initiale:[0m
ECHO ^[34m----------------[0m
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets
IF %diff% EQU 0 (
echo ^[32mDifférence = %diff1% octets[0m
) ELSE (
echo ^[31mDifférence = %diff1% octets[0m
)
GOTO CHOICE
:APRES
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a
FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b
FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e
FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i
ECHO ^[34mTaille finale:[0m
ECHO ^[34m--------------[0m
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets
IF %diff% EQU 0 (
echo ^[32mDifférence = %diff1% octets[0m
) ELSE (
echo ^[31mDifférence = %diff1% octets[0m
)
echo:
GOTO END
:CHOICE
echo:
CHOICE /C ON /M "Procéder à la sauvegarde?"
IF %ERRORLEVEL% EQU 1 GOTO COPY
IF %ERRORLEVEL% EQU 2 GOTO QUIT
:COPY
ROBOCOPY "%orig%" "%dest%" /MIR /NP /NJH /NDL /NFL /NJS
echo ^[32mSauvegarde effectuée le %date%[0m
echo:
CALL :APRES
pause
GOTO END
:QUIT
echo:
IF %diff% EQU 0 (
echo ^[32mDifférence nulle: Synchronisation inutile[0m
) ELSE (
echo ^[31mAttention! Sauvegarde abandonnée[0m
)
echo:
CALL :APRES
pause
:END
23 mars 2023 à 17:03
Moi, je suis comme les gendarmes, bête et discipliné, ou bien je n'ai pas bien compris.
Si tu ne veux pas de récapitulatif en cas d'abandon (volontaire ou pas de différence), tu vires la ligne 70.
J'ai commenté ici une manière artisanale d'obtenir le caractère d'échappement, je n'ai pas trouvé mieux pour le moment (sauf bien sûr une fois qu'on en a trouvé un de conserver sur son disque le script qui le contient).
https://forums.commentcamarche.net/forum/affich-37816788-batch-entrer-le-caractere-d-echappement-au-clavier
23 mars 2023 à 16:58
Seul bug, mais ça ne me gêne franchement pas
23 mars 2023 à 17:05
Je t'ai répondu ci-dessus.
23 mars 2023 à 18:08
Si la ligne 70 est bien "CALL :APRES" de :QUIT et que je l'enlève, j'obtiens, en cas de réponse N :
Il ne passe pas directement à :QUIT quand il y a équivalence source/dest, et me répète malgrès tout les tailles source/dest...
Et en cas de réponse O :
il ne m'affiche plus les tailles source/dest...
Soit ma ligne 70 à supprimer n'est pas celle affichée dans le dernier script que j'ai posté, soit je n'ai pas compris.
Pour le carré au clavier, il est censé apparaître avec la combinaison Alt+9633, mais ça ne marche pas pour moi..
https://www.webnots.com/alt-code-shortcuts-for-square-symbols/
23 mars 2023 à 18:36
Les petits carrés, Niet; c'est comme le Canada Dry, ça ressemble mais ça n'en est pas, c'est juste un caractère qui n'est pas lisible dans le script et qui ressemble d'ailleurs à un rectangle.
Puisqu'on est dans CHOICE, les zolies couleurs et la défonce du consommateur, pas de raison que le choix ne soit pas coloré.
Supprime la ligne CHOICE en 48 et mets à la place sans oublier les caractères d'échappement:
ECHO [93mProcéder à la sauvegarde?[0m
Insère une nouvelle ligne au-dessous:
CHOICE /C ON
L'instruction CALL :APRES dans :QUIT commande d'aller exécuter ce qui se trouve dans l'étiquette :APRES (mesure des nouvelles tailles) et de revenir au point de départ après.
Le début du script zappe :APRES en allant à :CHOICE après :AVANT; si je supprime CALL :APRES dans :QUIT, il est donc impossible que la section :APRES soit lue autrement qu'à partir de :COPY, et c'est le comportement observé chez moi: tu as mal du enregistrer.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question23 mars 2023 à 22:42
Voici le script modifié tel que proposé
@echo off CHCP 65001 >NUL SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" REM SET "orig=G:\photos\antibes" REM SET "dest=C:\Users\brucine\Desktop\antibes" echo ^[93mSAUVEGARDE THUNDERBIRD[0m :AVANT FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i echo: ECHO ^[34mTaille initiale:[0m ECHO ^[34m----------------[0m FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets IF %diff% EQU 0 ( echo ^[32mDifférence = %diff1% octets[0m ) ELSE ( echo ^[31mDifférence = %diff1% octets[0m ) GOTO CHOICE :APRES FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i ECHO ^[34mTaille finale:[0m ECHO ^[34m--------------[0m FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets IF %diff% EQU 0 ( echo ^[32mDifférence = %diff1% octets[0m ) ELSE ( echo ^[31mDifférence = %diff1% octets[0m ) echo: GOTO END ECHO ^[93mProcéder à la sauvegarde?[0m CHOICE /C ON echo: CHOICE /C ON /M "Procéder à la sauvegarde?" IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT :COPY ROBOCOPY "%orig%" "%dest%" /MIR /NP /NJH /NDL /NFL /NJS echo ^[32mSauvegarde effectuée le %date%[0m echo: CALL :APRES pause GOTO END :QUIT echo: IF %diff% EQU 0 ( echo ^[32mDifférence nulle: Synchronisation inutile[0m ) ELSE ( echo ^[31mAttention! Sauvegarde abandonnée[0m ) echo: CALL :APRES pause :END
La fenetre s'ouvre, affiche la taille de la source, puis disparait....
23 mars 2023 à 22:45
Il me semble avoir respecté à la lettre les consignes....
Pourrais tu poster le script en intégralité avec les (bonnes) modifs stp ?
24 mars 2023 à 08:03
Le même qu'hier, que je viens encore de tester, et qui fonctionne dans les 4 cas de figure (abandon avec ou sans différence, sauvegarde avec ou sans différence) à cela près qu'il affiche la taille finale si on a l'idée curieuse de sauvegarder sans différence (Ne pas oublier d'intervertir les REM et les SET).
Si on veut parer à cette fausse manoeuvre, remplacer dans :COPY la ligne CALL :APRES par
IF %diff% NEQ 0 CALL: APRES
Si tu veux prendre en compte les différences de fichiers de configuration, je me suis fait aider dans une faute de syntaxe de l'exclusion du dossier datareporting (qui contient les lz4) que je ne trouvais pas, j'ai le batch correspondant à ta disposition.
@echo off CHCP 65001 >NUL REM SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" REM SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" SET "orig=G:\photos\antibes" SET "dest=C:\Users\brucine\Desktop\antibes" echo ^[93mSAUVEGARDE THUNDERBIRD[0m :AVANT FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i echo: ECHO ^[34mTaille initiale:[0m ECHO ^[34m----------------[0m FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets IF %diff% EQU 0 ( echo ^[32mDifférence = %diff1% octets[0m ) ELSE ( echo ^[31mDifférence = %diff1% octets[0m ) GOTO CHOICE :APRES FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i ECHO ^[34mTaille finale:[0m ECHO ^[34m--------------[0m FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets IF %diff% EQU 0 ( echo ^[32mDifférence = %diff1% octets[0m ) ELSE ( echo ^[31mDifférence = %diff1% octets[0m ) echo: GOTO END :CHOICE echo: ECHO [93mProcéder à la sauvegarde?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT :COPY ROBOCOPY "%orig%" "%dest%" /MIR /NP /NJH /NDL /NFL /NJS echo ^[32mSauvegarde effectuée le %date%[0m echo: CALL :APRES pause GOTO END :QUIT echo: IF %diff% EQU 0 ( echo ^[32mDifférence nulle: Synchronisation inutile[0m ) ELSE ( echo ^[31mAttention! Sauvegarde abandonnée[0m ) echo: pause :END
24 mars 2023 à 10:03
Méga top ! Merci
Il me pose tjs la question si le souhaite "Procéder à la sauvegarde ?" alors qu'il y a égalité et qu'il devrait renvoyer à "Différence nulle: Synchronisation inutile", mais tout le reste fonctionne impeccable. Ne t'ennuie pas à corriger cette erreur car c'est vraiment un détail sans importance.
Pour le rectangle vertical, forme vide, de code Unicode « U+25AF » en raccourci clavier, je continue de fouiller car j'aimerais à mon tour pouvoir te dépanner, mais j'avoue que pour l'instant : bredouille... Je continue mes recherches.
24 mars 2023 à 10:10
Remplace la ligne 24 par:
echo ^[32mDifférence = %diff1% octets[0m & GOTO QUIT
24 mars 2023 à 10:34
Je devinais ce renvoi GOTO QUIT, mais ne savais comment l'intégrer, et ne savais pas qu'on pouvais seconder la commande avec un &... Merci.
J'ai débuté cette discussion avec 0 notions de batch, et ai fini grâce à tes explications, à comprendre quelques trucs.
Je ne pensais pas qu'un batch pouvait aller aussi loin en faisant en même temps appel à powershell. Les possibilités me paraissent presque infinies.
A nouveau 1 grand merci pour tout brucine. Il "tue" ce bash, comme dirait ma fille !!
24 mars 2023 à 10:58
PowerShell n'y a que 2 intérêts: contourner la limite de calcul 32 bits si ton dossier fait plus de 2 Go et permettre comme tu le souhaites d'afficher les tailles avec séparateurs de milliers: il est beaucoup plus complexe que Batch, mais beaucoup plus complet et permet dans le cas précis cet affichage en une seule ligne sans passer par une syntaxe Batch indigeste.
Sans ces exigences, on fait (hors fioritures de décoration) le job en Batch pur via Robocopy en moitié moins long.
Quand mes enfants étaient jeunes, dans mon patelin breton, il y avait à la sortie du bled un virage à angle droit qui faisait moultes victimes à la sortie des bistros, et qui depuis a été dévié par une rocade: les jeunes le désignaient comme "le virage de la mort qui tue".
24 mars 2023 à 11:35
Sur un plan plus général, les puristes objecteront que les scripts mixtes ne sont pas une bonne pratique, ils ont raison quand on peut l'éviter.
On peut tout écrire en PowerShell mais j'y suis moins à l'aise, je trouve que le "volet décoratif" (couleurs...) y est moins agréable (ça ne se mange pas en salade...) et surtout PowerShell pèche pour la copie incrémentielle comparée à ROBOCOPY qui permet de l'écrire en une ligne simple.
26 mars 2023 à 15:37
Chacun sait que rien n'est autant indispensable que ce qui est inutile.
Il est à peu près exclu de rédiger la chose en "batch pur" via ROBOCOPY parce que la sortie a non seulement un format rebutant mais l'idée tordue de les transcrire en multiples d'octets; là où un script tarabiscoté aurait permis d'obtenir en batch la séparation des milliers à partir des octets, là, on a les yeux pour pleurer:
Il y a toutefois une alternative avec XXCOPY, qui est un clone de ROBOCOPY permettant d'ailleurs en d'autres cas que celui qui nous intéresse davantage de fantaisies, et qui nous donne la sortie en octets avec séparation des milliers.
ça se télécharge là, par le passé il suffisait de copier l'exécutable XXCOPY.EXE sous C:\Windows\System32, je ne suis pas sûr qu'avec les moins vieilles il ne faille pas passer par l'install.bat, qui instaure en plus quelques goodies: une console Dos personnalisée dont rien n'oblige à se servir, et une barre de menus à ne pas utiliser.
https://www.majorgeeks.com/mg/getmirror/xxcopy,1.html
Le résultat permet de gérer facilement l'exclusion du fameux dossier jsonlz4 (dossier datareporting du Profil) via la syntaxe /Xdatareporting\ (l'absence d'espace après le X n'est pas un typo), et qu'on enlève si on n'en veut pas.
Copies d'écran sans différence, et avec copie abandonnée ou pas plus script.
@echo off set i=0 set j=0 REM SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" REM SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" SET "orig=G:\photos\antibes" SET "dest=C:\Users\brucine\Desktop\antibes" echo: ECHO ^[104;93mSAUVEGARDE THUNDERBIRD[0m echo: :SIZEDEBUT CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %dest% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %orig% %dest% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt FOR /F "skip=1 tokens=1-2 delims==" %%a IN ('type "_debut.txt"') DO SET titreD=%%a & SET sizeD=%%b & CALL :PROCESSD CHCP 65001 >NUL ECHO ^[104mTaille initiale (sans fichiers de configuration):[0m echo Source = %sizeorigD% octets echo Sauvegarde = %sizedestD% octets set diff1D=%diffD:~1% set diff2D=%diff1D:~0,1% IF %diff2D% LSS 1 ( echo ^[103;92mDifférence = %diffD% octets[0m & GOTO NOCOPY ) ELSE ( echo ^[103;91mDifférence = %diffD% octets[0m & GOTO CHOICE echo: :PROCESSD set /a i=%i%+1 IF %i% EQU 2 SET sizeorigD=%sizeD% IF %i% EQU 9 SET sizedestD=%sizeD% IF %i% EQU 16 SET diffD=%sizeD% exit /b :CHOICE echo: ECHO [93mProcéder à la sauvegarde?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT :NOCOPY echo: echo ^[103;92mDifférence nulle: Synchronisation inutile[0m echo: GOTO END :QUIT echo: echo ^[103;91mAttention,Synchronisation Abandonnée![0m echo: GOTO END :SIZEFIN CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %dest% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %orig% %dest% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt FOR /F "skip=1 tokens=1-2 delims==" %%c IN ('type "_fin.txt"') DO SET titreF=%%c & SET sizeF=%%d & CALL :PROCESSF CHCP 65001 >NUL ECHO ^[104mTaille finale (sans fichiers de configuration):[0m echo Source = %sizeorigF% octets echo Sauvegarde = %sizedestF% octets echo ^[103;92mDifférence = %diffF% octets[0m echo: GOTO END :PROCESSF set /a j=%j%+1 IF %j% EQU 2 SET sizeorigF=%sizeF% IF %j% EQU 9 SET sizedestF=%sizeF% IF %j% EQU 16 SET diffF=%sizeF% exit /b :COPY XXCOPY %orig% %dest% /Xdatareporting\ /Q3 /CBQ /CLONE /YY >NUL echo: echo ^[32mSauvegarde effectuée le %date%[0m echo: GOTO SIZEFIN :END pause del _debut.txt del _fin.txt
27 mars 2023 à 14:18
Merci brucine pour ce nouveau script.
Chez moi, la fenêtre s'ouvre et se ferme sans que j'ai pu tester la chose... Je ne cois pas que ce soit le ^ qui manque ligne 42 qui me cause ce souci...
Au début, j'avais tenté un version xcopie avec un compte rendu MsgBox qui marchait pas mal. Ca m'écrasait intégralement le dossier de sauvegarde (ce qui ne me dérangeait pas). Par contre je n'avais pas le choix de sauvegarder ou non. Je voulais aussi que ça me crée un fichier texte dans D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\ qui soit nommé en date et heure de la sauvegarde, mais je n'y suis pas arrivé...
rem ################################### rem ### Effacement ancien dossier CIBLE ### rem ################################## rmdir /S /Q D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release rem ################################## rem ### Création nouveau dossier CIBLE ### rem ################################# mkdir D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release rem ######################################## rem ### Copie du dossier SOURCE vers CIBLE ### rem ####################################### xcopy C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release /E /C /H @echo off echo --------------------------------------------------- echo --------------- OPERATION TERMINEE --------------- echo --------------------------------------------------- rem ###################################################################### rem ### Affichage Taille dossiers avec séparateurs de milliers dans fenêtre Windows ### rem ##################################################################### @echo off set "source=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" set "target=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" set "size1=0" set "size2=0" for /f "tokens=3" %%i in ('dir /s /a /-c "%source%" ^| findstr /i "fichier(s)"') do set size1=%%i for /f "tokens=3" %%i in ('dir /s /a /-c "%target%" ^| findstr /i "fichier(s)"') do set size2=%%i setlocal EnableDelayedExpansion set "formatted_size1=!size1!" set "formatted_size2=!size2!" rem Ajouter des séparateurs de milliers for /f "tokens=1-2 delims=." %%a in ("!formatted_size1!.") do set "formatted_size1=%%a" & set "decimal_part=%%b" set "formatted_size1=!formatted_size1:,=!" set "formatted_size1=!formatted_size1!.!decimal_part!" for /f "tokens=1-2 delims=." %%a in ("!formatted_size2!.") do set "formatted_size2=%%a" & set "decimal_part=%%b" set "formatted_size2=!formatted_size2:,=!" set "formatted_size2=!formatted_size2!.!decimal_part!" echo MsgBox "Taille source (C:) : " ^& FormatNumber(!formatted_size1!, 0, True) ^& " octets" ^& vbCrLf ^& "Taille cible (D:) : " ^& FormatNumber(!formatted_size2!, 0, True) ^& " octets", vbOKOnly, "Resultat du backup" > %temp%\temp.vbs start /wait %temp%\temp.vbs del %temp%\temp.vbs exit
27 mars 2023 à 16:58
En effet, j'ai oublié l'accent circonflexe ligne 42, mais ça marche sans, preuve par l'image dans les captures en <97>.
Le batch en <97> ne fonctionne pas avec XCOPY, il faut un utilitaire de sauvegarde incrémentielle, précédemment ROBOCOPY, maintenant XXCOPY (voir notamment syntaxe lignes 16 à 18) dont lien de téléchargement également en <97>.
La dernière version sur ce lien est 3.3, CCM propose 2.9, Internet Archive 2.25.
Cette dernière est certainement suffisante pour notre propos et sans gadget (on copie XXCOPY.EXE sous
C:\Windows\System32 et c'est tout), les dernières versions n'amènent rien en ce qui nous intéresse (sinon une limitation réseau dans la version gratuite).
Le lien direct vers l'éditeur est mort parce que l'entreprise l'est (et l'auteur aussi).
https://www.majorgeeks.com/mg/getmirror/xxcopy,1.html
https://www.commentcamarche.net/telecharger/utilitaires/24579-xxcopy/
27 mars 2023 à 20:18
xxcopy est surement pas mal, mais son installation via l'exe refroidit un peu. Après une multitude de confirmations à faire, et des avertissement de limitations a 60 jours, une histoire de 1 euro, etc, il s'installe enfin. Ensuite, quand le batch est lancé, on répond ok à 3 demandes de confirmation du contrôle de compte utilisateur, puis la fenêtre ms-dos se ferme.
J'ai tenté ensuite via le install.bat pour x64, mais le résultat est le même... Comme je n'ai pas survéillé son install avec revo inustaller pro (que j'utilise à chaque nouvelle installation) je ne peux plus le désinstaller, donc je ferai avec, en espérant que ce mini utilitaire de pixelab ne bouscule pas trop mon système...
27 mars 2023 à 20:52
Je me sers de différentes versions depuis des lustres, toute la comédie de l'installation par le bat ne fait rien d'autre que de nous saouler de baratin pour finir par installer seulement quelques fichiers commençant par XXCOPY sous System32 (le nombre dépend de la version, 5 au maximum), sans rien d'autre (service, dll...).
Pour désinstaller, on supprime ces fichiers, fin des courses.
C'est pourquoi (je ne sais plus si les versions 2.9 et 3.3 le permettent, la version 2.25 c'est sûr), il est plus simple de ne pas passer par le bat et de se contenter de copier XXCOPY.EXE à la main dans System32: l'EXE n'est PAS un programme d'installation, mais l'utilitaire à part entière; si on clique dessus, rien ne se passe puisqu'il n'obéit (comme XCOPY) qu'à la ligne de commande, et l'UAC (si elle est activée) braille comme à chaque fois qu'on lance un EXE inconnu.
Il s'agissait à l'origine d'un utilitaire de sauvegarde destiné aux entreprises à l'appui de la commercialisation d'un système de sauvegarde matériel spécifique: il est logique que l'auteur ait cherché à vendre sa soupe en monnayant l'utilisation réseau (dans les dernières versions) et celle sur plusieurs postes, mais il est gratuit dans le cadre de l'utilisation individuelle.
28 mars 2023 à 15:05
XXCOPY.exe dans System32 sans install, ok. Résultat nickel en lançant le bat en admin.
L'opération de copie dure aussi longtemps qu'avec xcopy, mais ça marche impeccable. Merci.
Y aurait il un moyen pour que le bat crée un fichier texte dans D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\ , un *.txt qui soit nommé en date et heure de la sauvegarde, par ex 230328-15h00.txt si je fais la sauvegarde maintenant ?
28 mars 2023 à 15:21
J'ai pensé à une ligne de type
D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird type nul > %date%-%time%.txt
mais ça ne marche pas..
28 mars 2023 à 15:33
echo >LOG_%date:~8,2%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
28 mars 2023 à 16:12
Yes ! Merci jee pee !
Et si je veux que ce fichier soit créé dans le dossier D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\, dois-je faire précéder cette echo par un cd...... ou autre ?
Modifié le 28 mars 2023 à 16:16
echo >D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\LOG_%date:~8,2%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
28 mars 2023 à 16:41
Top ! Merci !
Franchement, ce script va au delà de mes espérances. Du coup je fais mes sauvegardes 4 fois par jour... juste pour le plaisir !
Je le poste ici en intégralité, pour ceux que le fruit de votre travail collectif intéresserait
@echo off CHCP 65001 >NUL SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" REM SET "orig=G:\photos\antibes" REM SET "dest=C:\Users\brucine\Desktop\antibes" echo: echo ^[07mSAUVEGARDE THUNDERBIRD[0m :AVANT FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i echo: ECHO ^[08mTaille rdwdst72.default-release:[0m ECHO ^[08m--------------------------------[0m FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets IF %diff% EQU 0 ( echo Différence = ^[32m%diff1% octets[0m & GOTO QUIT ) ELSE ( echo Différence = ^[31m%diff1% octets[0m ) GOTO CHOICE :APRES FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum"') DO SET td=%%b FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i ECHO ^[34mTaille finale:[0m ECHO ^[34m--------------[0m FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse | Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets IF %diff% EQU 0 ( echo ^[32mDifférence = %diff1% octets[0m ) ELSE ( echo ^[31mDifférence = %diff1% octets[0m ) echo: GOTO END :CHOICE echo: ECHO ^[08mLancer la sauvegarde?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT :COPY echo ^[31mSAUVEGARDE EN COURS....[0m ROBOCOPY "%orig%" "%dest%" /MIR /NP /NJH /NDL /NFL /NJS echo ^[32mSauvegarde mise a jour dans txt[0m echo >D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\Derniere_SVG_le_%date:~8,2%%date:~3,2%%date:~0,2%-%time:~0,2%h%time:~3,2%.txt echo: CALL :APRES pause GOTO END :QUIT echo: IF %diff% EQU 0 ( echo ^[32mDifférence nulle: Synchronisation inutile[0m ) ELSE ( echo ^[32mSauvegarde abandonnée[0m ) echo: pause :END
Grand merci à brucine pour sa patience, et à jee pee pour sa participation !
29 mars 2023 à 13:11
Bonjour,
Il faut donc en plus des bretelles et de la ceinture un 3ème accessoire: l'affichage "sauvegarde le..." n'a lieu qu'après la commande effective de copie, verrouillée par l'affichage des tailles avant et après, sans compter que la date de dernière modification peut s'obtenir dans l'item propriétés du dossier de destination.
S'il faut des fichiers de log, je trouve plus intéressant de les mettre à la racine du dossier de sauvegarde que dans le dossier lui-même, c'est plus facile à retrouver, en français que le chemin soit plutôt:
D:\bibi\Pro\Documents\Sauvegardes_pro\
mais c'est toi qui vois.
J'ai peut-être encore mieux, donner au dossier le nom de la date d'exécution, plus besoin de fichier de log.
Comme suit, je l'ai fait dans la version XXCOPY parce que c'est celle que j'avais sous la main, le contexte est le même via ROBOCOPY/PowerShell:
@echo off set i=0 set j=0 set time1=%time:~0,2% set time2=%time:~3,2% set date1=%date:~0,2% set date2=%date:~3,2% set date3=%date:~6,4% REM SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" REM SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" SET "orig=G:\photos\antibes" SET "dest=C:\Users\brucine\Desktop" IF NOT EXIST "%dest%\**_**h**" GOTO VIERGE SET "destfin=%date1%%date2%%date3%_%time1%h%time2%" FOR /F %%p IN ('DIR /B "%dest%\**_**h**"') DO SET destinit=%%p GOTO SIZEDEBUT :VIERGE SET destinit="%date1%%date2%%date3%_%time1%h%time2%" MD %dest%\%destinit% :SIZEDEBUT echo: ECHO ^[104;93mSAUVEGARDE THUNDERBIRD[0m echo: CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %destinit% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %orig% %destinit% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt FOR /F "skip=1 tokens=1-2 delims==" %%a IN ('type "_debut.txt"') DO SET titreD=%%a & SET sizeD=%%b & CALL :PROCESSD CHCP 65001 >NUL ECHO ^[104mTaille initiale (sans fichiers de configuration):[0m echo Source = %sizeorigD% octets echo Sauvegarde = %sizedestinitD% octets set diff1D=%diffD:~1% set diff2D=%diff1D:~0,1% IF %diff2D% LSS 1 ( echo ^[103;92mDifférence = %diffD% octets[0m & GOTO NOCOPY ) ELSE ( echo ^[103;91mDifférence = %diffD% octets[0m & GOTO CHOICE echo: :PROCESSD set /a i=%i%+1 IF %i% EQU 2 SET sizeorigD=%sizeD% IF %i% EQU 9 SET sizedestinitD=%sizeD% IF %i% EQU 16 SET diffD=%sizeD% exit /b :CHOICE echo: ECHO [93mProcéder à la sauvegarde?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT :NOCOPY echo: echo ^[103;92mDifférence nulle: Synchronisation inutile[0m echo: GOTO END :QUIT echo: echo ^[103;91mAttention,Synchronisation Abandonnée![0m echo: FOR /F %%u IN ('dir /b /a "%destinit%\*"') DO ( GOTO END ) RD /S /Q %destinit% GOTO END :SIZEFIN CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %destinit% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %orig% %destinit% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt FOR /F "skip=1 tokens=1-2 delims==" %%c IN ('type "_fin.txt"') DO SET titreF=%%c & SET sizeF=%%d & CALL :PROCESSF MOVE %destinit% %destfin% >NUL CHCP 65001 >NUL ECHO ^[104mTaille finale (sans fichiers de configuration):[0m echo Source = %sizeorigF% octets echo Sauvegarde = %sizedestfinF% octets echo ^[103;92mDifférence = %diffF% octets[0m echo: GOTO END :PROCESSF set /a j=%j%+1 IF %j% EQU 2 SET sizeorigF=%sizeF% IF %j% EQU 9 SET sizedestfinF=%sizeF% IF %j% EQU 16 SET diffF=%sizeF% exit /b :COPY XXCOPY %orig% %destinit% /Xdatareporting\ /Q3 /CBQ /CLONE /YY >NUL echo: echo ^[32mSauvegarde effectuée le %date%[0m echo: GOTO SIZEFIN :END pause del _debut.txt del _fin.txt
29 mars 2023 à 20:39
Eh eh .. Si bretelles et ceinture sont insuffisants, on pourrait appeler ça un baudrier... :)
Super ce dossier dans rdwdst72.default-release. C'est bien que ça ne bouscule pas le nom "rdwdst72.default-release" du dossier, car en cas de crash de thunderbird, je copie le dossier sauvagardé à son ancien emplacement sur C:, et tout roule comme avant. Ce dossier suppl ne gênera en rien thunderbird. Je seul souci, c'est qu'il ne retrouve plus ses petits après une sauvegarde, il m'indique:
SAUVEGARDE THUNDERBIRD
Taille initiale (sans fichiers de configuration):
Source = 9 074 500 706 octets
Sauvegarde = 0 octets
Différence = 9 074 500 706 octets
alors que je viens de faire une sauvegarde juste avant, avec le même script, et sans lancer thunderbird entre temps.
Curieux ...
29 mars 2023 à 21:08
J'ai testé dans tous les cas de figure (absence ou présence initiale d'un dossier de sauvegarde, différence ou pas dans les dossiers, abandon ou pas), ça fonctionne dans tous les cas.
Si l'affichage de la sauvegarde est à 0, il faut commencer par se demander si c'est vrai ou pas (comparer physiquement la taille de la source et de la destination); si ça ne l'est pas, c'est qu'il y a une erreur dans la ligne
echo Sauvegarde = %sizedestfinF% octets
soit de définition de la variable, soit de son calcul SIZEFIN + PROCESSF; on peut aussi s'en assurer en ne confirmant pas le pause dans END, permettant de lire le fichier fin.txt avant son effacement.
Noter aussi que la manipulation oblige à définir différemment le chemin de la destination (lignes 14 et 17) et que j'ai donc modifié les variables suivantes y faisant référence en conséquence.
Je suppose que tu ne t'es pas contenté de recopier le script en changeant source et destination lignes 13 et 14 mais que tu l'as intégré à ta propre sauce qu'il faudrait que tu montres pour trouver le bug.
Le script en question crée un dossier de sauvegarde à date, c'est le but, le dernier que j'ai testé dans la journée s'appelle 29032023_12h57 et ne se prête donc pas à être restauré en l'état.
Pour ce faire, il faut au plus simple avoir dans un fichier texte le nom réel du dossier et renommer en fonction avant restauration.
On peut aussi peaufiner en décidant que
(destinit et) destfin valent rdwdst72.default-release-%date1%%date2%%date3%_%time1%h%time2%
En cas de restauration, je renomme en effaçant tout ce qu'il y a derrière release.
29 mars 2023 à 20:42
et aussi qu'il me dépose un "_debut.txt" vide sur mon bureau après exécution, car je lance ce batch sur mon bureau
30 mars 2023 à 20:21
Voici le script complet
@echo off set i=0 set j=0 set time1=%time:~0,2% set time2=%time:~3,2% set date1=%date:~0,2% set date2=%date:~3,2% set date3=%date:~6,4% SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" REM SET "orig=G:\photos\antibes" REM SET "dest=C:\Users\brucine\Desktop" IF NOT EXIST "%dest%\**_**h**" GOTO VIERGE SET "destfin=%date1%%date2%%date3%_%time1%h%time2%" FOR /F %%p IN ('DIR /B "%dest%\**_**h**"') DO SET destinit=%%p GOTO SIZEDEBUT :VIERGE SET destinit="%date1%%date2%%date3%_%time1%h%time2%" MD %dest%\%destinit% :SIZEDEBUT echo: ECHO ^[104;93mSAUVEGARDE THUNDERBIRD[0m echo: CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %destinit% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %orig% %destinit% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt FOR /F "skip=1 tokens=1-2 delims==" %%a IN ('type "_debut.txt"') DO SET titreD=%%a & SET sizeD=%%b & CALL :PROCESSD CHCP 65001 >NUL ECHO ^[104mTaille initiale (sans fichiers de configuration):[0m echo Source = %sizeorigD% octets echo Sauvegarde = %sizedestfinF% octets set diff1D=%diffD:~1% set diff2D=%diff1D:~0,1% IF %diff2D% LSS 1 ( echo ^[103;92mDifférence = %diffD% octets[0m & GOTO NOCOPY ) ELSE ( echo ^[103;91mDifférence = %diffD% octets[0m & GOTO CHOICE echo: :PROCESSD set /a i=%i%+1 IF %i% EQU 2 SET sizeorigD=%sizeD% IF %i% EQU 9 SET sizedestinitD=%sizeD% IF %i% EQU 16 SET diffD=%sizeD% exit /b :CHOICE echo: ECHO ^[93mProcéder à la sauvegarde?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT :NOCOPY echo: echo ^[103;92mDifférence nulle: Synchronisation inutile[0m echo: GOTO END :QUIT echo: echo ^[103;91mAttention,Synchronisation Abandonnée![0m echo: FOR /F %%u IN ('dir /b /a "%destinit%\*"') DO ( GOTO END ) RD /S /Q %destinit% GOTO END :SIZEFIN CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %destinit% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %orig% %destinit% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt FOR /F "skip=1 tokens=1-2 delims==" %%c IN ('type "_fin.txt"') DO SET titreF=%%c & SET sizeF=%%d & CALL :PROCESSF MOVE %destinit% %destfin% >NUL CHCP 65001 >NUL ECHO ^[104mTaille finale (sans fichiers de configuration):[0m echo Source = %sizeorigF% octets echo Sauvegarde = %sizedestfinF% octets echo ^[103;92mDifférence = %diffF% octets[0m echo: GOTO END :PROCESSF set /a j=%j%+1 IF %j% EQU 2 SET sizeorigF=%sizeF% IF %j% EQU 9 SET sizedestfinF=%sizeF% IF %j% EQU 16 SET diffF=%sizeF% exit /b :COPY XXCOPY %orig% %destinit% /Xdatareporting\ /Q3 /CBQ /CLONE /YY >NUL echo: echo ^[32mSauvegarde effectuée le %date%[0m echo: GOTO SIZEFIN :END pause del _debut.txt del _fin.txt
Voici le script complet
J'y ai modifié la ligne Sauvegarde = %sizedestfinF% octets, et cette fois il m'affiche :
Source = 9 074 500 706 octets
Sauvegarde = octets
Différence = 9 074 500 706 octets
l'aurais-je mal adapté ? ce qui est très possible...
30 mars 2023 à 23:37
Je crois que tu t'es planté dans la définition de la variable dest en début de fichier, j'avais attiré ton attention sur le fait que le chemin était différent si l'on veut nommer les dossiers en fonction de la date.
Mais ce soir, j'ai une migraine noire, j'éplucherai et testerai ça demain et je te retournerai le feedback.
31 mars 2023 à 10:02
Le dest m'envoie bien vers "rdwdst72.default-release" et non aux Antibes. C'est bien dommage car je ne connais pas ce coin de la planête, et par les temps qui courent, je crois que ça me ferait vraiment du bien..eh eh.
C'est peut être le saut GOTO VIERGE dans le cas ou le rep date/heure existe ?.. mais il ne fait qu'enjamber la création de ce dossier en cas d'existence, et ne modifie en rien le diff....J'avoue être un peu perdu.
Je t'espère en meilleure forme qu'hier soir. Ne te casse pas trop la tête pour ce script, car celui de la Réponse 54 / 57 fait déjà le taf bien au delà de mes souhaits. Un petit txt à coté de rdwdst72.default-release me montre du premier coup d'oeil que le boulot a été fait. Je vais essayer ce weekend d'en créer un autre sur cette base pour qu'il me copie mon carnet d'adresses, + rapidement qu'un export en csv depuis thunderbird, et qu'il me copie mon dernier Bookmark FIREFOX. Je fais chaque fois ce "copies" de sauvegarde manuellement, et maintenant que j'ai ce modèle, ça me tente bien de l'adapter..
31 mars 2023 à 16:19
Dans le papotage:
-Firefox, tu te casses le train pour rien:
Tu tapes about:config, tu confirmes, tu tapes "book" et à la ligne browser.bookmarks.autoExportHTML, à droite, tu changes avec les flèches de "False" à "True".
Tu as ainsi en permanence tes marque-pages à jour au format bookmarks.html, plus qu'à faire une sauvegarde externe du fichier au cas où (ou une copie externe de tout le profil Firefox).
-Ce n'est pas outre-mer aux Antibes, mais dans les Alpes-Maritimes, j'y ai vécu enfant:
Je m'en suis servi de dossier cobaye, c'est pratique, il n'y a juste que quelques photos, mais revenons à nos moutons.
Tu m'as fait transpirer parce que tu as modifié des variables et des chemins à la hussarde, pour trouver le bug...
Cela dit, j'ai ma part de responsabilité parce que la syntaxe d'effacement du dossier de sauvegarde pour première sauvegarde avortée à l'étiquette QUIT était foireuse et parce que je n'avais pas pensé aux oiseaux de nuit.
Le format **_**h** par exemple ligne 38 était destiné à sécurisé les sauvegardes en ne traitant que les dossiers dont le nom contenait jjmmaaaa_(hh)h(mm), rendant improbable qu'il s'agisse d'un autre dossier; j'avais juste oublié que quand (hh) ne comportait qu'un chiffre (1h52, 9h48) on se faisait planter.
J'ai eu pitié de toi, j'ai viré les rues d'Antibes et j'ai créé un dossier bidon Thunderbird à sa place normale, mais si j'ai une palanquée de partitions, je n'en ai aucune en D:\, tu dois donc te contenter de remplacer par D:\ ce qui est écrit E:\.
Le résultat te sort un dossier de sauvegarde nommé à la date de dernière modification (par exemple 31032023_15h39) se trouvant sous le dossier Mails_thunderbird.
J'en ai même rajouté une couche en cas de plantage: le deuxième script annexé va chercher le nom du profil Thunderbird (y compris un nouveau si on a du désinstaller et réinstaller) et renomme le dossier 31032023_15h39 par exemple rdwdst72.default-release, plus qu'à le couper-coller à sa place (on ne peut pas faire de script simple pour ça, on se fait jeter parce que la destination est dans les dossiers Users).
Script de synchronisation:
@echo off set i=0 set j=0 echo %time% > time.txt FOR /F %%q IN ('type "time.txt"') DO SET heure=%%q set time1=%heure:~0,2% IF %time1% LSS 10 ( GOTO AM ) ELSE ( GOTO TIME ) :AM set time1=%time:~0,1% set time1=%i%%time% GOTO TIME :TIME del time.txt set time2=%time:~3,2% set date1=%date:~0,2% set date2=%date:~3,2% set date3=%date:~6,4% DIR /B %Appdata%\Thunderbird\Profiles\ >> thunder.txt FOR /F %%v IN ('type "thunder.txt"') DO SET titre1=%%v & CALL :PROCESST GOTO DOSSIERS :PROCESST SET titre2=%titre1:~-8% IF %titre2%==release SET titre=%titre1% SET titre=%titre: =% SET "orig=%AppData%\Thunderbird\Profiles\%titre%" exit /b :DOSSIERS SET "dest=E:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird" IF NOT EXIST "%dest%\**_**h**" GOTO VIERGE SET "destfin=%date1%%date2%%date3%_%time1%h%time2%" FOR /F %%p IN ('DIR /B "%dest%\**_**h**"') DO SET destinit=%%p GOTO SIZEDEBUT :VIERGE SET destinit=%date1%%date2%%date3%_%time1%h%time2% MD %dest%\%destinit% :SIZEDEBUT echo: ECHO ^[104;93mSAUVEGARDE THUNDERBIRD[0m echo: CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %dest%\%destinit% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %orig% %dest%\%destinit% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt FOR /F "skip=1 tokens=1-2 delims==" %%a IN ('type "_debut.txt"') DO SET titreD=%%a & SET sizeD=%%b & CALL :PROCESSD CHCP 65001 >NUL ECHO ^[104mTaille initiale (sans fichiers de configuration):[0m echo Source = %sizeorigD% octets echo Sauvegarde = %sizedestinitD% octets set diff1D=%diffD:~1% set diff2D=%diff1D:~0,1% IF %diff2D% LSS 1 ( echo ^[103;92mDifférence = %diffD% octets[0m & GOTO NOCOPY ) ELSE ( echo ^[103;91mDifférence = %diffD% octets[0m & GOTO CHOICE echo: :PROCESSD set /a i=%i%+1 IF %i% EQU 2 SET sizeorigD=%sizeD% IF %i% EQU 9 SET sizedestinitD=%sizeD% IF %i% EQU 16 SET diffD=%sizeD% exit /b :CHOICE echo: ECHO ^[93mProcéder à la sauvegarde?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT :NOCOPY echo: echo ^[103;92mDifférence nulle: Synchronisation inutile[0m echo: GOTO END :QUIT echo: echo ^[103;91mAttention,Synchronisation Abandonnée![0m DIR /b /s /a "%dest%\%destinit%" | findstr .>nul || ( RD /S /Q %dest%\%destinit% ) GOTO END :SIZEFIN CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %dest%\%destinit% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %orig% %dest%\%destinit% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt FOR /F "skip=1 tokens=1-2 delims==" %%c IN ('type "_fin.txt"') DO SET titreF=%%c & SET sizeF=%%d & CALL :PROCESSF MOVE %dest%\%destinit% %dest%\%destfin% >NUL CHCP 65001 >NUL ECHO ^[104mTaille finale (sans fichiers de configuration):[0m echo Source = %sizeorigF% octets echo Sauvegarde = %sizedestfinF% octets echo ^[103;92mDifférence = %diffF% octets[0m echo: GOTO END :PROCESSF set /a j=%j%+1 IF %j% EQU 2 SET sizeorigF=%sizeF% IF %j% EQU 9 SET sizedestfinF=%sizeF% IF %j% EQU 16 SET diffF=%sizeF% exit /b :COPY echo: echo ^[93mPatientez,Sauvegarde en cours...%[0m XXCOPY %orig% %dest%\%destinit% /Xdatareporting\ /Q3 /CBQ /CLONE /YY >NUL echo: echo ^[32mSauvegarde effectuée le %date%[0m echo: GOTO SIZEFIN :END pause del thunder.txt del _debut.txt del _fin.txt
Script de restauration:
@echo off SET save=E:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\ SET profil=%Appdata%\Thunderbird\Profiles\ :PROFIL DIR /B %profil% >> profil.txt FOR /F %%a IN ('type "profil.txt"') DO SET nom_profil1=%%a & CALL :PROCESSPROFIL GOTO SAVE :PROCESSPROFIL SET nom_profil2=%nom_profil1:~-8% IF %nom_profil2%==release SET nom_profil=%nom_profil1% exit /b :SAVE DIR /B %save% >> nom_save.txt FOR /F %%b IN ('type "nom_save.txt"') DO SET nom_save=%%b :RESTORE MOVE %save%%nom_save% %save%%nom_profil% :END del profil.txt del nom_save.txt
1 avril 2023 à 01:24
Magnifique ce coin !.... comme quoi nul besoin d'aller au bout du monde pour découvrir des coins vraiment sympas..
Effectivement, pour firefox, je me contecterai de copier le dossier C:\Users\bibi\AppData\Roaming\Mozilla\Firefox\Profiles\cghf72ys.default-release-1679336511497\bookmarkbackups qui ne contient qu'une quinzaine des derniers backups de firefox (600ko par fichier, c'est pas émorme)
Je devine un peu avoir mis le bazar dans le script, désolé. Par contre je n'y ai pas vu "d'oiseaux de nuit"...
Pour ce script, je me suis uniquement contenté de faire comme indiqué, de façon bête et disciplinée, remplacer
SET "dest=E:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird" par
SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird"
et surtout pas touché à
SET "orig=%AppData%\Thunderbird\Profiles\%titre%"
puisque tu as créé, et merci encore, un dossier Thunderbird factice sur ton ordi
Résultat, vais-je l'avouer...,
J'ai ensuite lu et relu les recommandations, tout vérifié, recommencé mais même résultat.
J'ai ensuite tenté de modifier tout adressage orig et dest par :
orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release
dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release
mais le résultat était pire, ...
A défaut de piètre copieur, je fais un bien piètre analyste....
1 avril 2023 à 01:25
Quelle déception de ne pouvoir tester le script de restauration..
1 avril 2023 à 07:40
Le script de restauration, il ne fait pas tout le job parce que, comme expliqué, il faudrait qu'il s'attribue des privilèges sur le dossier Users que Windows lui refuse; si j'y pense, je chercherai un subterfuge, mais c'est compliqué à écrire.
Il se contente de renommer le dossier de sauvegarde 01042023_07h24 en rdwdst72.default-release ce qui permet en cas de restauration de le copier-coller directement à sa place avec la souris sans avoir à le renommer à la main.
Ou au cours de tests vice-versa si j'inverse les 2 variables suivantes pour renommer rdwdst72.default-release à la date courante:
MOVE %save%%nom_save% %save%%nom_profil%
Tu peux donc parfaitement tester.
Un oiseau de nuit, en ce qui nous intéresse, c'est quelqu'un qui fait le job entre 0h00 et 9h59, et ce n'est que rarement mon cas pour tester parce que j'ai une vie sociale et/ou un lit; vérification faite (nous sommes dans le créneau), pendant ce laps de temps, l'heure n'a qu'un chiffre dans le format d'origine 7:34 et sort 7: au lieu de 07 (et 21 s'il est 21h34, 2 chiffres) ce qui évidemment plante le script.
Correction faite sur cette période (sans rien changer à l'autre), garder en l'état sauf la lettre de destination, changer E: en D:
@echo off set i=0 set j=0 echo %time% > time.txt FOR /F %%q IN ('type "time.txt"') DO SET heure=%%q set time1=%heure:~0,2% set time11=%heure:~0,1% set time12=%heure:~1,1% IF %time12%==: ( GOTO AM ) ELSE ( GOTO TIME ) :AM set time1=%i%%time11% GOTO TIME :TIME del time.txt set time2=%time:~3,2% set date1=%date:~0,2% set date2=%date:~3,2% set date3=%date:~6,4% DIR /B %Appdata%\Thunderbird\Profiles\ >> thunder.txt FOR /F %%v IN ('type "thunder.txt"') DO SET titre1=%%v & CALL :PROCESST GOTO DOSSIERS :PROCESST SET titre2=%titre1:~-8% IF %titre2%==release SET titre=%titre1% SET titre=%titre: =% SET "orig=%AppData%\Thunderbird\Profiles\%titre%" exit /b :DOSSIERS SET "dest=E:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird" IF NOT EXIST "%dest%\**_**h**" GOTO VIERGE SET "destfin=%date1%%date2%%date3%_%time1%h%time2%" FOR /F %%p IN ('DIR /B "%dest%\**_**h**"') DO SET destinit=%%p GOTO SIZEDEBUT :VIERGE SET destinit=%date1%%date2%%date3%_%time1%h%time2% MD %dest%\%destinit% :SIZEDEBUT echo: ECHO ^[104;93mSAUVEGARDE THUNDERBIRD[0m echo: CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %dest%\%destinit% C:\_TEMPD /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt XXCOPY %orig% %dest%\%destinit% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _debut.txt FOR /F "skip=1 tokens=1-2 delims==" %%a IN ('type "_debut.txt"') DO SET titreD=%%a & SET sizeD=%%b & CALL :PROCESSD CHCP 65001 >NUL ECHO ^[104mTaille initiale (sans fichiers de configuration):[0m echo Source = %sizeorigD% octets echo Sauvegarde = %sizedestinitD% octets set diff1D=%diffD:~1% set diff2D=%diff1D:~0,1% IF %diff2D% LSS 1 ( echo ^[103;92mDifférence = %diffD% octets[0m & GOTO NOCOPY ) ELSE ( echo ^[103;91mDifférence = %diffD% octets[0m & GOTO CHOICE echo: :PROCESSD set /a i=%i%+1 IF %i% EQU 2 SET sizeorigD=%sizeD% IF %i% EQU 9 SET sizedestinitD=%sizeD% IF %i% EQU 16 SET diffD=%sizeD% exit /b :CHOICE echo: ECHO ^[93mProcéder à la sauvegarde?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO QUIT :NOCOPY echo: echo ^[103;92mDifférence nulle: Synchronisation inutile[0m echo: GOTO END :QUIT echo: echo ^[103;91mAttention,Synchronisation Abandonnée![0m DIR /b /s /a "%dest%\%destinit%" | findstr .>nul || ( RD /S /Q %dest%\%destinit% ) GOTO END :SIZEFIN CHCP 1252 >NUL XXCOPY %orig% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %dest%\%destinit% C:\_TEMPF /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt XXCOPY %orig% %dest%\%destinit% /L /Xdatareporting\ /Q3 /CBQ /CLONE /YY >> _fin.txt FOR /F "skip=1 tokens=1-2 delims==" %%c IN ('type "_fin.txt"') DO SET titreF=%%c & SET sizeF=%%d & CALL :PROCESSF MOVE %dest%\%destinit% %dest%\%destfin% >NUL CHCP 65001 >NUL ECHO ^[104mTaille finale (sans fichiers de configuration):[0m echo Source = %sizeorigF% octets echo Sauvegarde = %sizedestfinF% octets echo ^[103;92mDifférence = %diffF% octets[0m echo: GOTO END :PROCESSF set /a j=%j%+1 IF %j% EQU 2 SET sizeorigF=%sizeF% IF %j% EQU 9 SET sizedestfinF=%sizeF% IF %j% EQU 16 SET diffF=%sizeF% exit /b :COPY echo: echo ^[93mPatientez,Sauvegarde en cours...%[0m XXCOPY %orig% %dest%\%destinit% /Xdatareporting\ /Q3 /CBQ /CLONE /YY >NUL echo: echo ^[32mSauvegarde effectuée le %date%[0m echo: GOTO SIZEFIN :END pause del thunder.txt del _debut.txt del _fin.txt
1 avril 2023 à 11:29
La restauration, ce ne sont pas des droits sur les dossiers Users qui plantent, mais l'incapacité de MOVE à ce que source et destination soient sur des partitions différentes (je ne sais pas ce qu'il avait bu, Gros Bill, quand il a inventé Windows...).
On en revient donc à ses premières amours avec XXCOPY et là, ça fonctionne:
@echo off CHCP 65001 >NUL set i=0 SET save=E:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\ SET profil=%Appdata%\Thunderbird\Profiles\ echo %time% > time.txt FOR /F %%q IN ('type "time.txt"') DO SET heure=%%q set time1=%heure:~0,2% set time11=%heure:~0,1% set time12=%heure:~1,1% IF %time12%==: ( GOTO AM ) ELSE ( GOTO TIME ) :AM set time1=%i%%time11% GOTO TIME :TIME del time.txt set time2=%time:~3,2% set date1=%date:~0,2% set date2=%date:~3,2% set date3=%date:~6,4% SET "nom_save_heure=%date1%%date2%%date3%_%time1%h%time2%" ECHO ^[104;93mRESTAURATION PROFIL THUNDERBIRD[0m echo: ECHO ^[103;91mNe fonctionne que s'il existe un profil[0m ECHO ^[103;91mNe pas le supprimer ou, si crash, réinstaller Thunderbird avant[0m echo: :NOMPROFIL DIR /B %profil% >> profil.txt FOR /F %%a IN ('type "profil.txt"') DO SET nom_profil1=%%a & CALL :PROCESSPROFIL GOTO NOMSAVE :PROCESSPROFIL SET nom_profil2=%nom_profil1:~-8% IF %nom_profil2%==release SET nom_profil=%nom_profil1% exit /b :NOMSAVE DIR /B %save% >> nom_save.txt FOR /F %%b IN ('type "nom_save.txt"') DO SET nom_save=%%b ECHO ^[104;93mNom de sauvegarde: %nom_save%[0m echo: ECHO ^[103;92mRenommer la sauvegarde au format (H)oraire (P)rofil (N)on?[0m CHOICE /C HPN IF %ERRORLEVEL% EQU 1 GOTO CHANGETOHOUR IF %ERRORLEVEL% EQU 2 GOTO CHANGETOPROFIL IF %ERRORLEVEL% EQU 3 GOTO SAUVEGARDE :CHANGETOHOUR echo: IF EXIST "%save%\**_**h**" ECHO ^[103;91mSauvegarde déjà au format horaire![0m & GOTO SAUVEGARDE IF NOT EXIST "%save%\**_**h**" MOVE %save%%nom_save% %save%%nom_save_heure% >NUL ECHO ^[104;93mNouveau Nom de sauvegarde: %nom_save_heure%[0m GOTO SAUVEGARDE :CHANGETOPROFIL IF EXIST "%save%\**_**h**" MOVE %save%%nom_save% %save%%nom_profil% >NUL echo: ECHO ^[104;93mNouveau Nom de sauvegarde: %nom_profil%[0m :SAUVEGARDE echo: ECHO ^[103;92mVoulez-vous restaurer?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO PROCEED IF %ERRORLEVEL% EQU 2 GOTO QUIT :QUIT echo: echo:[103;91mAttention,Restauration Abandonnée![0m GOTO END :PROCEED IF EXIST "%save%\**_**h**" MOVE %save%%nom_save% %save%%nom_profil% >NUL RD /S /Q %profil%%nom_profil% XXCOPY %save%%nom_profil% %profil%%nom_profil% /CLONE /YY >NUL echo: ECHO ^[103;92mRestauration effectuée[0m echo: ECHO ^[103;92mVoulez-vous rétablir la sauvegarde au format horaire?[0m CHOICE /C ON IF %ERRORLEVEL% EQU 1 GOTO HEURE IF %ERRORLEVEL% EQU 2 GOTO END :HEURE echo: MOVE %save%%nom_profil% %save%%nom_save% >NUL ECHO ^[104;93mNouveau Nom de sauvegarde: %nom_save%[0m :END echo: pause del profil.txt del nom_save.txt del time.txt
23 mars 2023 à 14:49
Ce n'est pas un bon plan puisque du fait des fichiers de configuration la différence à chaque ouverture de Thunderbird ne sera jamais nulle et que du fait de l'absence de leur liste tu n'auras aucun moyen de voir à quoi correspond cette différence, mais c'est toi qui vois.
ROBOCOPY synchronise: les fichiers nouveaux ou modifiés dans la source s'ajoutent dans ceux de destination ou les écrasent; les fichiers qui existent dans la destination mais plus dans la source sont supprimés de la destination.
Le contenu des 2 dossiers à l'issue de l'opération est donc forcément identique.
Sur le plan de la forme, tu as à nouveau zappé mes zolies couleurs, je ne sais pas si c'est fait exprès puisqu'il reste des reliquats de leur syntaxe; je les ai rétablies et j'en ai même rajouté rien que pour t'embêter, libre à toi de les enlever.
J'ai ajouté mes 2 lignes SET pour tester, tu les supprimes et tu enlèves le REM devant les tiennes.
Donc ta version "ceinture et bretelles" bien que ROBOCOPY la rende inutile et que le teste de taille sans prendre en compte les fichiers de configuration ne sert à rien: