Script batch incorrect :(
Fermébrucine Messages postés 18576 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 14 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
- Script les visiteurs pdf - Forum Cinéma / Télé
101 réponses
13 mars 2023 à 13:09
Pour plus de clarté, voici mon script complet.
J'y ai ajouté la demande d'affichage du résultat dans une fenêtre windows :
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
Voici la fenêtre obtenue, et en-dessous, le fanêtre que je souhaiterais obtenir
13 mars 2023 à 17:42
@brucine StatutMembre
Oui, la sauvegarde auto est utile, mais a besoin d'un soft et que l'ordi soit allumé dans la plage de planification.
Ce que je souhaite n'est tant de faire de l'incrémentiel, de savoir quels fichiers ont été mis a jour ou ajoutés, ou si les fichiers sont corrompus. C'est juste avec mon petit batch comparer cible et source avec un coup d'oeil sur ma petite fenêtre windows.
et NON, juré promis, je n'irai pas réclamer du C++, html java ou python... pour quelconque option supplémentaire.
@jee pee StatutModérateur
Merci, le calcul se fait enfin. Le seul souci est que si je lance depuis un ps1, la fenêtre s'ouvre et se ferme rapidement sans que je puisse la lire. Et si je lance powershell et que j'exécute le script, le résultat apparaît de façon assez peu lisible.
C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release = 9 053 726 199 D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release = 9 022 241 024 Différence = 31 485 175 PS C:\Windows\System32\WindowsPowerShell\v1.0> pause
Y aurait il un moyen de superposer clairement les lignes comme dans la fenêtre windows que j'ai posté ?
Quand tu fais des calculs avec des variables, ne dois-tu pas les encadrer avec des %
C'est ce que mon stupide petit test montre:
@echo off
set a=3
set /a dif=%a%+3
echo %dif%
-
set /a diff=size1-size2
Puisque l'interprète ne voit pas de nombre, il s'arrête au début et donne 0.
Il faudra écrire:
set /a diff=%size1%-%size2%
11 mars 2023 à 18:19
Bonjour,
Comme l'indique @PierrotLeFou ton calcul donne zéro puisque tu n'utilises pas les variables correctement.
Après un calcul en script est limité à une valeur sur 32 bits. Avec tes valeurs le calcul ne fonctionnera pas :
D:\>set /a cal=8965660753 - 8965506493 Nombre non valide. Les nombres sont limités à une précision de 32 bits D:\>set /a cal=965660753 - 965506493 154260
et une petite remarque il manque une " en 26
11 mars 2023 à 18:52
Bonjour,
Sur un plan général, si on veut chercher le bug dans un batch, on commente @echo off par REM devant et on met successivement une ligne pause derrière chaque commande quitte à demander son résultat en variable par une commande ECHO de cette variable si elle n'est pas explicite.
J'ajoute aux remarques précédentes concernant l'absence de pourcentages pour les variables que:
-La ligne setlocal enabledelayedexpansion est parfaitement inutile: elle a pour but que dans une boucle FOR chaque variable alors désignée par !var! au lieu de %var% soit traitée à tour de rôle alors que sans, le calcul ne sera fait que sur la dernière valeur de %var% rendue par la boucle FOR
-Idem pour la réinitialisation des variables "set sizen=0": elles ne sont pas utilisées ailleurs dans le script et sont réinitialisées à sa sortie.
-Dans l'exemple qui nous est donné, les variables folder3 et folder4 sont redondantes puisqu'elles correspondent respectivement à target1 et target2; le calcul qui suit le serait aussi s'il était opérant, mais il rend le résultat à un format non numérique sur le mode 39 871 136 au lieu de 39871136 et il ne rendra d'ailleurs rien du tout parce qu'une nouvelle opération de soustraction set /a diff=%size3%-%size4% n'est pas demandée
-Sur la remarque pertinente de limitation à 2^32 -1, un script par exemple comme suit (il approxime une valeur en octets en Mo, Go, To avec une perte minimale) permet le calcul en tronquant la chaîne numérique initiale jusqu'à ce que sa valeur passe en-dessous de ce seuil:
@echo off
setlocal enableextensions
REM GOTO UN
SET /P _LECTEUR=ENTRER LETTRE A TESTER:
ECHO ----------------------------------
FOR /F "tokens=3 USEBACKQ" %%F IN (`dir /-c %_LECTEUR%:`) DO set "size=%%F"
GOTO TEST
:UN
REM ENLEVER REM ICI ET AU DESSUS ET ENTRER CI DESSOUS UNE VALEUR EN OCTETS
SET SIZE=63842058240
:TEST
SET SIZEL=%SIZE%
SET LENGTH=0
SET /A KILO=1024
SET /A MEGA=1048576
SET /A LIMIT13=109951163
SET /A LIMIT10=107374182
:LOOP
IF "%SIZEL%"=="" GOTO ENDLOOP
SET SIZEL=%SIZEL:~0,-1%
SET /A LENGTH=%LENGTH%+1
GOTO LOOP
:ENDLOOP
IF %LENGTH% EQU 13 GOTO TERA
IF %LENGTH% GTR 9 GOTO GIGA
GOTO MEGA
:TERA
SET/A "SIZE9=%SIZE:~0,9%"
IF %SIZE9% LSS %LIMIT13% GOTO GIGA
SET/A "SIZET=%SIZE9%/%KILO%"
SET/A "SIZET=%SIZET%*1000%"
SET/A "SIZET=%SIZET%/%KILO%"
SET/A "SIZET=%SIZET%*1000%"
SET/A "SIZET=%SIZET%/%KILO%"
SET/A "SIZET=%SIZET%*1000%"
SET/A "SIZET=%SIZET%/%KILO%"
SET/A "SIZET=%SIZET%*1000%"
ECHO ESPACE DISPONIBLE %SIZET:~0,1%,%SIZET:~1,3% TO
PAUSE
GOTO END
:GIGA
SET/A "SIZE9=%SIZE:~0,9%"
IF %SIZE9% LSS %LIMIT10% GOTO GIGALIMIT
SET/A "SIZEG=%SIZE9%/%KILO%"
SET/A "SIZEG=%SIZEG%*1000%"
SET/A "SIZEG=%SIZEG%/%KILO%"
SET/A "SIZEG=%SIZEG%*1000%"
SET/A "SIZEG=%SIZEG%/%KILO%"
IF %LENGTH% EQU 13 ECHO ESPACE DISPONIBLE %SIZEG:~0,3%,%SIZEG:~3,2% GO
IF %LENGTH% EQU 12 ECHO ESPACE DISPONIBLE %SIZEG:~0,3%,%SIZEG:~3,2% GO
IF %LENGTH% EQU 11 ECHO ESPACE DISPONIBLE %SIZEG:~0,2%,%SIZEG:~2,2% GO
IF %LENGTH% EQU 10 ECHO ESPACE DISPONIBLE %SIZEG:~0,1%,%SIZEG:~1,2% GO
PAUSE
GOTO END
:GIGALIMIT
IF %LENGTH% EQU 10 GOTO MEGA
SET/A "SIZEG=%SIZE9%/%KILO%"
SET/A "SIZEG=%SIZEG%*1000"
SET/A "SIZEG=%SIZEG%/%KILO%"
SET/A "SIZEG=%SIZEG%*1000"
SET/A "SIZEG=%SIZEG%/%KILO%"
SET/A "SIZEG=%SIZEG%*1000"
ECHO ESPACE DISPONIBLE %SIZEG:~0,3%,%SIZEG:~3,2% GO
PAUSE
GOTO END
:MEGA
SET/A "SIZEG=%SIZE%/%MEGA%"
IF %LENGTH% EQU 10 ECHO ESPACE DISPONIBLE SEULEMENT %SIZEG:~0,3% MO
IF %LENGTH% EQU 9 ECHO ESPACE DISPONIBLE SEULEMENT %SIZEG:~0,3% MO
IF %LENGTH% EQU 8 ECHO ESPACE DISPONIBLE SEULEMENT %SIZEG:~0,2% MO
PAUSE
:END
cls
exit
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionEn réalité, on ne veut pas vraiment connaître la différence. On veut savoir si les longueurs sont identiques.
On peut ramener les valeurs à des chaînes comme suit:
@echo off
set a=9876543210
set b=9876543210
if "%a%" equ "%b%" (
echo oui
) else (
echo non
)
11 mars 2023 à 19:06
Effectivement, en ajoutant les % là ou @PierrotLeFou le suggère, ça devrait mieux marcher, mais je retrouve le problème que ça générait : la fenêtre ms-dos apparaît en flash puis disparait, et exécuter ce script avec cmd en administrateur me retourne :
echo Taille du dossier source : %size3% octets Taille du dossier source : 0 octets echo Taille du dossier cible : %size4% octets Taille du dossier cible : 0 octets echo Difference : %diff% octets Difference : 0 octets if %diff% EQU 0 ( Plus ? echo Operation OK Plus ? ) else ( Plus ? echo Erreur Plus ? ) Operation OK
Peut être que comme le dit @gee pee, il y a une histoire de 32 bits et de valeurs trop importantes.....
@brucine : Je comprends l'inutilité de "enabledelayedexpansion", la redondance des folders3 et 4 (que j'avais mis pour que ça ne gêne pas le calcul, ce qui est inutile). J'imagine que votre script permet une "troncature" de chaîne, mais j'avoue ne savoir comment l'adapter à mon cas (mes connaissances étant assez limitées :II). Pourriez vous intégrer votre script dans le mien pour que je puisse tester et vous retourner le résultat s'il vous plait ?
11 mars 2023 à 21:05
Je rebondis sur ce que dit jee pee concernant la limite de calcul, et d'ailleurs je ne sais pas compter, elle est de 2^31 -1 soit 2147483647 ou encore, en divisant 3 fois par 1024, de 2 Go.
Remarquons qu'il s'agit d'une chaîne de 10 chiffres mais qui n'est pas un critère tout à fait suffisant: tout ce qui a 9 chiffres ou moins passe, mais aussi tout ce qui en a 10 et est inférieur à la valeur en question.
Je me fais planter dès que je tente une opération hors cette limite, ce qui m'oblige à diminuer la longueur de la chaîne de manière suffisante, puis à reconstituer le nombre ainsi obtenu.
Le hic s'il doit y avoir une comparaison par le biais d'une opération, c'est que si source et destination sont de taille très différente, cela m'empêche de soustraire des torchons et des serviettes, par exemple 380 Mo à 2,5 Go.
Il y a toujours une solution à tout, mais dans le cas présent, elle est assez complexe et surtout ne sert à rien, ça m'étonnerait fort que tu aies un profil Thunderbird de plus de 2 Go, je ne vais donc pas te saouler avec ça, il y a probablement une erreur de syntaxe.
ça, ça fonctionne, sinon que évidemment j'ai modifié source et destination pour tester :
@echo off
set "target1=G:\photos\antibes"
for /f "tokens=3,5" %%a in ('dir /a /s /w /-c "%target1%"^| findstr /b /l /c:" "') do if "%%b"=="" set "size1=%%a"
echo; Taille source: %size1% octets
set "target2=C:\Users\brucine\Desktop\antibes"
for /f "tokens=3,5" %%a in ('dir /a /s /w /-c "%target2%"^| findstr /b /l /c:" "') do if "%%b"=="" set "size2=%%a"
echo; Taille destination : %size2% octets
set /a diff=%size1%-%size2%
if %diff% GTR 0 (
echo erreur! difference: %diff%
) else (
echo Operation OK
)
pause
Je reviens sur mon intervention. Quel est le but réel de ce script?
Est-ce bien de connaître la différence entre la source et la destination, ou c'est de s'assurer que les deux sont identiques?
Une comparaison de chaînes comme j'ai montré est suffisante.
Voici un lien pour la manipulation de chaînes:
https://www.dostips.com/DtTipsStringManipulation.php#Snippets.SplitString
12 mars 2023 à 10:31
Bonjour,
Si on ne veut connaître que l'existence d'une différence et pas sa valeur, il suffit en effet de supprimer la ligne de calcul de soustraction et de modifier la conditionnelle pour qu'elle se contente de comparer les 2 variables, la face du monde ne s'en trouvera pas changée.
Le script qui nous est présenté est de toute façon assez verbeux, on peut le mettre au régime selon que les dossiers traités atteindront la limite de 2 Go ou pas: dans le premier cas, aucune opération n'est possible, pas même la comparaison des variables par l'opérateur numérique EQU, et je dois alors comparer non pas des variables numériques mais des chaînes textuelles.
Par exemple si les dossiers font moins de 2 Go (mais le script cumule la taille de chaque fichier et prend donc du temps d'exécution s'il y en a des centaines ou des milliers):
@echo off
CHCP 65001 >NUL
set "source=G:\photos\antibes"
set "dest=C:\Users\brucine\Desktop\antibes"
CD /D "%source%"
FOR /R "." %%s IN (*) DO SET /A source+=%%~zs
CD /D "%dest%"
FOR /R "." %%t IN (*) DO SET /A dest+=%%~zt
IF NOT %source% EQU %dest% (echo différence) else (echo OK)
pause
Si maintenant je ne peux rien calculer parce que au-dessus de la limite 32 bits, la ligne de commande doit être un peu plus bavarde:
@echo off
CHCP 65001 >NUL
set "source=G:\photos\antibes"
set "dest=C:\Users\brucine\Desktop\antibes"
FOR /F "tokens=1-3 delims= " %%a in ('dir "%source%"^| find "fichier(s)"') do set "size_source=%%c"
FOR /F "tokens=1-3 delims= " %%d in ('dir "%dest%"^| find "fichier(s)"') do set "size_dest=%%f"
IF NOT "%size_source%"=="%size_dest%" (echo différence) else (echo OK)
pause
12 mars 2023 à 11:35
Pour rajouter de l'eau à ton moulin, PierrotLeFou, je me suis contenté de répondre à la question générale pour des dossiers A et B, mais pour des profils mails, l'intérêt m'échappe un peu.
Sans rentrer dans des détails tordus qui pourraient affecter la taille des fichiers (différence d'OS et/ou de système de partition entre la source et la destination) et sauf éventuels fichiers verrouillés (copie Thunderbird ouvert), une sauvegarde à l'instant t n'a aucune raison d'être différente de la source.
Si par contre je la programme tous les soirs, j'aurai forcément en différence dans la source les nouveaux mails de la journée en cours.
Quand bien même différences devrait-il y avoir que ce n'est pas leur taille qui m'intéresse, mais les fichiers affectés: il faut alors passer par une syntaxe ROBOCOPY qui me dira le nom des fichiers qui n'ont pas la même taille dans source et destination ou bien sont absents de l'une ou de l'autre.
12 mars 2023 à 12:37
Merci à tous pour vos réponse.
Je n'ai pas indiqué, pour ne montrer que la partie comparative du script, que la but initial est de copier la source vers la cible. La source est effectivement lourde car thundirbird stocke de nombreux mails. La cible est une unité de sauvegarde externe. Thunderbird, à ma connaissance n'est pas apte à ce "double-stockage", et faire un copier coller des dossier est long en manipulations et en temps de copie car pris en charge par windows.
Donc un fois la copie effectuée, le script m'expose les tailles respectives, compare les dossiers, et, pour plus de facilité me met un "ok" lorsque leur taille est identique, avec éventuellement la différence de taille s'il elle existe.
Donc rien d'urgent dans ma demande, juste un "confort" de savoir que tout est ok à l'issue d'un backuo, sans avoir à passer par des logiciels dédiés, pais juste un petit batch.
12 mars 2023 à 12:41
Pour tout avouer, GHATGPT m'avait suggéré ROBOCOPY. les valeurs cible/source étaient toujours, exactes il mais n'arrivait pas à un bon calcul de retranchement dans tous les codes qu'il m'a suggéré. l'IU est donc plus pertinente que l'IA... ;)
12 mars 2023 à 12:42
"IH" pardon, et non "IU"
12 mars 2023 à 13:05
J'ai tenté par moi-même une "adaptation" de BRUCINE
@echo off CHCP 65001 >NUL set "source=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" set "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" FOR /F "tokens=1-3 delims= " %%a in ('dir "%source%"^| find "fichier(s)"') do set "size_source=%%c" FOR /F "tokens=1-3 delims= " %%d in ('dir "%dest%"^| find "fichier(s)"') do set "size_dest=%%f" echo; Taille source (C:) : % size_source% octets echo; Taille destination (D:) : % size_dest% octets IF NOT "%size_source%"=="%size_dest%" (echo différence) else (echo OK) pause
Je crois que je me mélange méchamment les pinceaux car le retour est :
Taille source (C:) : octets Taille destination (D:) : octets différence Appuyez sur une touche pour continuer...
Je suis résolument mauvais...
12 mars 2023 à 13:19
en 11 et 12 tu as un blanc en trop sur % size_
12 mars 2023 à 14:32
Effectivement...
Ca me retourne :
Taille source (C:) : 59 221 373 octets Taille destination (D:) : 59 221 123 octets différence Appuyez sur une touche pour continuer...
alors que les bonnes taille sont (actuellemnt) :
Taille du dossier source : 8 965 660 753 octets Taille du dossier cible : 8 965 506 493 octets
12 mars 2023 à 16:05
ce doit être dir /s pour les sous-dossiers
12 mars 2023 à 17:16
S'il y a des sous-dossiers, oui.
Pendant que je passe par là, je commente <10> et <11> et, partant, l'utilité de ce script sur le mode "bretelles et ceinture".
Si j'ai fait tous les soirs à une heure où Thunderbird est fermé une tâche planifiée de sauvegarde et que j'ai contrôlé une première fois que cette tâche fonctionne, les chances de différence sont nulles.
Si toutefois je veux quand même vérifier, pourquoi ne pas faire d'une pierre deux coups, rendant le script sur lequel nous sommes en train de discuter inutile?
@echo off
CHCP 65001 >NUL
set "source=G:\photos\antibes"
set "dest=C:\Users\brucine\Desktop\antibes"
ROBOCOPY "%source%" "%dest%" /L /MIR /NP /NJH /NDL /LOG:Log.txt
Je teste les options de Log à ma sauce avec les commutateurs adéquats, quand je suis content, j'enlève le commutateur /L pour que la copie ne soit pas que simulée.
https://ss64.com/nt/robocopy.html
13 mars 2023 à 10:54
Excellent ce batch. Merci !
Ce que je ne comprends pas, ce sont les valeurs restituées avant copie et après copie, qui sont sensiblement les mêmes ...
La commande d copie qui a précédé ce script est la suivante, et aboutit à une taille idetique des dossiers source/destination :
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
Le résultat Log.txt intégral de votre script avant copie :
Plus récent 786432 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\abook-1.sqlite Plus récent 24 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\addons.json Plus récent 2392 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\addonStartup.json.lz4 Plus récent 1521 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\AlternateServices.txt Plus récent 200 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\compatibility.ini Plus récent 28875 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\extensions.json Plus récent 44697 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\folderCache.json Plus récent 2226 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\folderTree.json Plus récent 41.4 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\global-messages-db.sqlite Plus récent 0 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\parent.lock Plus récent 98304 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\permissions.sqlite Plus récent 24382 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\prefs.js Plus récent 293 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\search.json.mozlz4 Plus récent 392 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\session.json Plus récent 400 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\session.json.backup Plus récent 204 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\sessionCheckpoints.json Plus récent 248 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\SiteSecurityServiceState.txt Plus récent 4096 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\storage.sqlite Plus récent 10 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\virtualFolders.dat Plus récent 4489 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\xulstore.json Plus récent 66 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\crashes\store.json.mozlz4 Plus récent 163 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\datareporting\session-state.json Nouveau fichier 2885 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\datareporting\archived\2023-03\1678470083503.93c8339a-f3a7-4444-8b64-58b74da9066e.update.jsonlz4 Nouveau fichier 6960 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\datareporting\archived\2023-03\1678472542238.0a88c6e8-a2ac-498f-8fca-18c32a1f0b28.main.jsonlz4 Nouveau fichier 6963 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\datareporting\archived\2023-03\1678472542239.a85cbac1-cb36-4085-a581-81dc8f21ac8c.first-shutdown.jsonlz4 Nouveau fichier 6659 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\datareporting\archived\2023-03\1678632249859.bc4a9f28-f20d-43f5-b7d2-58d7f8774d4c.main.jsonlz4 Nouveau fichier 6659 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\datareporting\archived\2023-03\1678632249860.bf3f360f-d89e-41cd-9926-b83d5a17aeba.first-shutdown.jsonlz4 Nouveau fichier 6688 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\datareporting\archived\2023-03\1678633137233.afc7b1a2-98c5-48d4-b1f8-b00ae774cb64.main.jsonlz4 Nouveau fichier 6680 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\datareporting\archived\2023-03\1678633137234.fb8cff01-d893-4a68-b90f-afc6c82731b8.first-shutdown.jsonlz4 Plus récent 286578 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail-1.com\INBOX.msf Plus récent 340406 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail-1.com\[Gmail].sbd\Tous les messages.msf Plus récent 7.0 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\Deleted Items Plus récent 31678 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\Deleted Items.msf Plus récent 1.1 g C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\Drafts-1 Plus récent 7814 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\Drafts-1.msf Plus récent 312.9 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\INBOX Plus récent 6182 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\INBOX.msf Plus récent 3453 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\[Gmail].sbd\Corbeille.msf Plus récent 387.1 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\[Gmail].sbd\Messages envoy‚s Plus récent 6777 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\[Gmail].sbd\Messages envoy‚s.msf Plus récent 2.2 g C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\[Gmail].sbd\Tous les messages Plus récent 2.0 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\ImapMail\imap.gmail.com\[Gmail].sbd\Tous les messages.msf Plus récent 548.4 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\Mail\Local Folders\envoy‚-archi Plus récent 656934 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\Mail\Local Folders\envoy‚-archi.msf Plus récent 848.8 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\Mail\Local Folders\recus-archi Plus récent 893405 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\Mail\Local Folders\recus-archi.msf Plus récent 414.8 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\Mail\Local Folders\envoy‚-archi.sbd\Denis Plus récent 388713 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\Mail\Local Folders\envoy‚-archi.sbd\Denis.msf Plus récent 296.5 m C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\Mail\Local Folders\recus-archi.sbd\Denis Plus récent 299302 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\Mail\Local Folders\recus-archi.sbd\Denis.msf Plus récent 152 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\settings\data.safe.bin *Fichier SUPPL. 10355 D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release\shader-cache\59b1ca259dcc57d5 Plus récent 25417 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\19d53e6eb4e2999c Plus récent 7959 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\1dbbacf1cf46ca21 Plus récent 31866 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\383d482183b53201 Plus récent 18294 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\48b2e767cd8b442f Plus récent 26827 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\53a1ae3871c2f52c Plus récent 18797 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\5cafe08d4c8b0d2c Plus récent 47026 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\5ddd5c31cb03320c Plus récent 12393 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\791534174ded1d87 Plus récent 12843 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\88d4355058db4a98 Plus récent 33256 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\9d6e37bf9e3b9c57 Plus récent 17983 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\a267fb2b255f7ed8 Plus récent 50166 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\a41d38e5a468e873 Plus récent 7455 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\bbb26eae63afbae0 Plus récent 16851 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\c3c7ffe56b3059d3 Plus récent 24704 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\d5a0d402e89a9c23 Plus récent 23926 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\deed0cf5d1e72d87 Plus récent 40477 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\e6c2682906abaecf Plus récent 32869 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\e74d59fb1a92af57 Plus récent 8166 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\e7f42c88043ab536 Plus récent 11378 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\e97221978b6ed161 Plus récent 28089 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\f5d04018e39e0f0a Plus récent 26116 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\f943d3d91224538c Plus récent 356 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\shader-cache\startup_shaders Plus récent 139264 C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release\storage\permanent\chrome\idb\3870112724rsegmnoittet-es.sqlite ------------------------------------------------------------------------------- Total Copié IgnoréDiscordance ÉCHEC Extras Rép : 31 0 31 0 0 0 Fichiers : 369 75 294 0 0 1 Octets : 8.350 g 6.171 g 2.178 g 0 0 10.1 k Heures: 0:00:00 0:00:00 0:00:00 0:00:00 Fin : lundi 13 mars 2023 10:44:00
et celui après la commande de copie :
------------------------------------------------------------------------------- Total Copié IgnoréDiscordance ÉCHEC Extras Rép : 31 0 31 0 0 0 Fichiers : 369 0 369 0 0 0 Octets : 8.350 g 0 8.350 g 0 0 0 Heures: 0:00:00 0:00:00 0:00:00 0:00:00 Fin : lundi 13 mars 2023 10:47:11
13 mars 2023 à 14:06
Eh eh .... oui ! Ceci dit j'espère qu'il s'agit plus de persévérance que d'obstination....;)
Le but est de faire à coté un script batch qui ne fait pas la copie, mais me calcule la différence pour je j'en aie une idée, et que je procède à la copie. Je reçois/envoie des mails de façon spasmodique, et je ne déclenche pas de copie lorsque la différence est faible...
Pourquoi pas ce vbs, mais j'avoue que mes connaissances sont quasi-nulles.
Savez-vous comment corriger ce batch ?
13 mars 2023 à 14:23
Merci pour votre réponse @brucine, je l'ai bien comprise.
Je ne veux pas non plus prendre trop de votre temps, donc si mon souhait s'avère trop complexe en script batch, n'hésitez pas à me le dire et je me contenterai de faire le calcul "à part".
13 mars 2023 à 14:51
La question n'est pas de prendre du temps à faire des scripts, quelque part on est là pour ça, mais de le faire pour rien.
Je n'ai pas Thunderbird, mais Firefox et un autre logiciel de mail, je ne me pose même pas la question, il y a des années que j'ai une tâche planifiée quotidienne qui sauvegarde les deux sur un support externe: la question n'est même pas de sauvegarder mes mails s'il y a une différence, mais de les sauvegarder systématiquement s'il arrive un malheur (panne de disque, virus...): dans ce contexte, un script devient inutile.
Admettant que je le veuille quand même et que ROBOCOPY fonctionne et que les mêmes fichiers n'ont pas pu ne pas être synchronisés (c'est de toute façon absurde en matière de mail), je prends un dossier, j'en fais une copie ailleurs, je supprime volontairement un fichier dans la destination pour simuler le résultat:
Sans chercher midi à 14 heures, s'il y a au moins un nouveau mail, la syntaxe de simulation ROBOCOPY /L va afficher la ligne *Fichier SUPPL.: il me suffit donc de planifier à intervalles réguliers ce Batch auquel j'ajoute une commande FOR qui recherche ce terme dans le fichier de Log et qui, si elle le trouve, me rend l'ECHO "différence" ou ce que je veux.
Si je suis exigeant, je vais aussi afficher dans cette boucle FOR le token 2 (41676): j'ai la taille de la différence.
S'il y en a plusieurs, j'envoie ce token 2 vers une variable dont je fais le cumul: j'ai la somme des différences.
Pas plus simple que 2 batchs, un VBS, que sais-je?
Je veux bien rédiger la chose si tu ne sais pas faire, mais pas pour que tu viennes me dire qu'il faut ensuite y ajouter un programme en Cobol ou je ne sais quelle fantaisie...
Modifié le 13 mars 2023 à 16:05
Tu peux aussi utiliser Powershell à la place de CMD. C'est plus complet, mais plus difficile
créer un fichier compare_repertoire.ps1, l'extension PS1 doit être associée à Powershell
$orig="D:\DB\Thunderbird" $dest="D:\DB\Firefox" $to=(Get-ChildItem $orig -Recurse | Measure-Object -Property Length -Sum).Sum $td=(Get-ChildItem $dest -Recurse | Measure-Object -Property Length -Sum).Sum $diff=$to-$td if ($to -eq $td) { echo "$dest égal $orig" } else { " {0} = {1:n0} {2} = {3:n0} Différence = {4:n0} " -f $orig, $to, $dest, $td, $diff } pause
Ce qui donne
D:\DB\Thunderbird\ = 7 186 467 041 D:\DB\Firefox = 1 813 979 955 Différence = 5 372 487 086
Cliquez sur Entrée pour continuer...:
13 mars 2023 à 19:00
Je suis ennuyé car ma réponse a été retirée du fil de discussion :La voici à peu près dans les termes employés.
@brucine StatutMembre
Un backup en mode auto m'obligerait à utiliser un soft pour cela, et que mon ordi soit bien allumé dans les plages du plannificateur de tâches..
C'est juste le résultat du calcul que je souhaite, mais pas un backup incrémentiel, ni un état des aajouts ou remplacements de fichiers, ni une vérification de l'intégrite des fichiers.
...et promi juré, si tu as la patience de te pencher sur mon batch, je ne réclamerai pas du rabb façon python, html, C++ ou autre :)
@jee pee StatutModérateur
Génial, le calcul fonctionne enfin !!. Merci. Par contre, l'exécution du .ps1 me fait apparaitre disparaitre la fenêtre malgrès le "pause" final. Par contre, ça marche lorsque je lance powershell au préalable, mais la ligne de "compte-rendu" reste assez peu lisible, et assez éloignée de la simplicité du compte rendu de la petite fenêtre windows que j'avais posté.
Y a t'il un moyen de "formater" le texte des résultats obtenus ?
13 mars 2023 à 19:11
Parce que tu l'as je suppose effacée, l'ordre des interventions sur ce forum est anarchique, et ma réponse avec que je renouvelle.
Script modifié pour retours à la ligne, tu copies dans un fichier texte sur ton bureau que tu enregistres sous toto.ps1, sur lequel tu cliques à droite, exécuter avec PowerShell:
$orig="G:\photos\antibes"
$dest="C:\Users\brucine\Desktop\antibes"
$to=(Get-ChildItem $orig -Recurse | Measure-Object -Property Length -Sum).Sum
$td=(Get-ChildItem $dest -Recurse | Measure-Object -Property Length -Sum).Sum
$diff=$to-$td
if ($to -eq $td)
{ echo "$dest égal $orig"
} else
{ " {0} = {1:n0}
{2} = {3:n0}
Différence = {4:n0} " -f $orig, $to, $dest, $td, $diff }
echo .
pause
13 mars 2023 à 19:31
J'ai oublié le codage des caractères spéciaux (accents ligne 9); si on ne veut pas modifier à la main, enregistrer le texte copié sous, codage ANSI
14 mars 2023 à 12:29
Extra !
Merci !!
Et pour encoder "façon powershell" les commandes qui doivent précèder comme dans le batch : Effacement ancien dossier CIBLE, Recréation du dossier CIBLE, Copie du dossier SOURCE vers CIBLE, quelles seraient les bonnes commandes ?
14 mars 2023 à 13:04
Je n'utilise pas beaucoup PowerShell, on peut tout écrire en PowerShell, je ne suis pas un spécialiste.
Ou bien il me semble que les commandes Batch classiques non spécifiques PowerShell s'y exécutent sans problème.
Ou bien on prend le problème par l'autre bout de la lorgnette, on exécute une commande PowerShell dans un Batch, pour la syntaxe, dans le cas de figure qui suit, j'ai redirigé par la commande PowerShell en accolades la liste des MAJ Windows Update dans le fichier PS.txt du dossier courant:
powershell.exe -command "& { Get-Hotfix | select HotFixID, InstalledOn }" >"%~dp0PS.txt"
14 mars 2023 à 13:53
Mon bon coeur me perdra, entièrement en PowerShell, en principe pas très difficile puisque les variables existent déjà mais, à nouveau, je ne suis pas une flèche en PowerShell; je n'ai pas testé, fais une copie externe des dossiers source et destination pour vérifier si ça fonctionne:
$orig="G:\photos\antibes"
$dest="C:\Users\brucine\Desktop\antibes"
Remove-Item "$dest"
New-Item "$dest" -Type Directory
Get-Childitem "$orig" | Copy-Item -Destination "$dest" -Recurse
$to=(Get-ChildItem $orig -Recurse | Measure-Object -Property Length -Sum).Sum
$td=(Get-ChildItem $dest -Recurse | Measure-Object -Property Length -Sum).Sum
$diff=$to-$td
if ($to -eq $td)
{ echo "$dest égal $orig"
} else
{ " {0} = {1:n0}
{2} = {3:n0}
Différence = {4:n0} " -f $orig, $to, $dest, $td, $diff }
echo .
pause
15 mars 2023 à 11:11
Eh, eh ;) C'est tout à votre honneur Monseigneur !
Merci de t'y être essayé, mais je pense qu'il va falloir me rabattre sur un batch pointant powershell car le retour est identique à la fenêtre que j'ai posté plus haut... Mon seul souci est de pointer sur le "toto.ps1" situé dans
D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\
et je ne sais comment faire en transformant
"%~dp0PS.txt"
Modifié le 15 mars 2023 à 12:13
Testé, le script totalement Powershell marche parfaitement sinon que j'ai oublié quelques précautions, il est normal qu'il n'affiche pas de fichiers puisque la suppression-copie a synchronisé.
Si je veux voir si cette différence fonctionne, je commente les 3 nouvelles lignes Remove-Item, New-Item et Get-Childitem en mettant # devant.
Sur les affichages parasites, empêcher Remove-Item de demander confirmation par -Recurse et l'affichage console en le redirigeant vers Null ce qui nous donne:
Remove-Item "$dest" -Recurse | Out-Null
New-Item "$dest" -Type Directory | Out-Null
Cela nous rend donc inutile un script mixte et "%~dp0PS.txt", que l'on va tout de même expliciter: "%~dp0" est le chemin d'où le script est exécuté, si c'est le bureau, il vaut
C:\Users\xxx\Desktop\ que je peux donc remplacer par le chemin de mon choix parfaitement qualifié, par exemple "C:\Windows\Temp\PS.txt", où PS.txt est le nom du fichier texte où je veux écrire la sortie de la commande précédente.
C'était juste un exemple de syntaxe mixte qui ne nous serait pas ici de grand secours puisqu'il me suffit de rediriger la commande batch Powershell Get-Childitem vers NUL: >NUL et que les 2 suivantes définissent les variables dont j'ai besoin sans avoir besoin de les Loguer dans un fichier.
Modifié le 15 mars 2023 à 12:21
C'est plus lisible si on remplace par exemple:
"$dest égal $orig"
Par quelque chose du genre:
"Il n'y a pas de différence"
mais, c'est le cas de le dire, c'est chacun qui voit
15 mars 2023 à 12:26
Désolé, je me suis mal exprimé.
Le comparaison finale des répertoires fonctionne bien, mais l'opération :"Effacement ancien dossier CIBLE, Recréation du dossier CIBLE, Copie du dossier SOURCE vers CIBLE" ne se produit pas...
Modifié le 13 mars 2023 à 13:28
Tu restes obsédé par ton affichage de la différence ;-)
Plutôt que d'utiliser du vbs (qui est un langage de programmation) pour un affichage graphique, tu devrais faire un vbs qui reçoit 2 arguments, les 2 tailles avant/après, et ce vbs lui calculerait la différence avant d'afficher les 3 valeurs.
13 mars 2023 à 14:05
ça n'a pas de sens de supprimer la cible pour y recopier la source dans l'autre sens.
Il n'y en a pas davantage à vouloir faire de la sauvegarde incrémentielle avec XCOPY; dans le meilleur des cas, on va se baser sur la date de source vers destination, les fichiers devenus inutiles dans la destination vont rester en place: il faut utiliser ROBOCOPY (ou pour des besoins plus pointus, ce n'est pas le cas ici, XXCOPY).
J'ai également souligné que, à mon sens, l'existence d'une différence dans une procédure ROBOCOPY est totalement farfelue sauf fichiers verrouillés (opération faite lorsque Thunderbird est ouvert), mais que quand bien même il devrait en exister une que ce qui est pertinent est sa seule existence, qui amènera à consulter le fichier de Log auquel on demandera d'afficher le nom des fichiers concernés.
J'ai également illustré sans m'y étendre l'artefact (10,1 Ko): il va résulter de l'OS éventuel des partitions (granularité du temps), de leur format (FAT32, NTFS...) et de la taille des clusters que l'affichage de la taille totale des dossiers rendu par leurs propriétés ou par une commande "globale" la rendant (PowerShell, DIR global...) ne coïncidera pas forcément à Epsilon près avec celui de commandes rendant le calcul en décomposant la taille de chaque élément et en faisant l'addition.
On peut bien sûr se défaire de l'artefact en question en demandant que la différence ne soit affichée que si elle est supérieure à n Ko et ce qui va, dans les dossiers Mozilla, ne passer à la trappe que les fichiers de configuration, mais qui ne rend pas plus pertinente une différence arithmétique de disons n Mo: je n'ai en l'état aucun moyen de savoir si ces n Mo sont un seul fichier, un cumul de trois...
Mais, je radote, on parle dans le vide: sur une syntaxe ROBOCOPY écrite correctement et testée la première fois, l'existence d'une différence, chiffrée ou pas, est impossible.