Script batch incorrect :(
Fermébrucine Messages postés 18726 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
15 mars 2023 à 12:37
Voici le script qui fonctionne bien, celui sans ajout de l'opération de copie/remplacement :
$orig="C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" $dest="D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" $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} Difference = {4:n0} " -f $orig, $to, $dest, $td, $diff } echo . pause
Ceci dit, il ne fonctionne que si son lancement depuis "Powershell.ps1" se fait depuis mon bureau. Si je le déplace ailleurs, la fenêtre powershell s'ouvre et se ferme façon "flash"...
Voici mon script :
$orig="C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" $dest="D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" Remove-Item "$dest" -Recurse | Out-Null New-Item "$dest" -Type Directory | Out-Null 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 "Il n'y a pas de différence" } else { echo "$orig = $to" echo "$dest = $td" echo "Différence = $diff" } echo . pause
Si je le lance par 1 double clic sur toto.ps1, il ouvre une fenêtre powershell qui disparaît aussitôt.. Son temps d'apparition me laisse penser qu'il n'effectue aucune copie, car l'opération de copie prend normalement 20 secondes.
Si je le lance par 1 clic droit, en mode admin, la feêtre suivante apparaît
Le résultat est le même si mon ps1 est enregistré sous NOTEPAD en encodage Ansi, ou sous Notepad++ encodage OEM 850....
15 mars 2023 à 15:05
Ce que je ne comprends pas, c'est que le "script" affichait tailles et différence sans souci avant d'y ajouter les commandes de copie....
15 mars 2023 à 15:11
celui-ci
$orig="C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" $dest="D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" $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} Difference = {4:n0} " -f $orig, $to, $dest, $td, $diff } echo . pause
qui affiche
Les tailles source et cible sont différentes car j'ai reçu des mails depuis...
15 mars 2023 à 20:29
Le codage ANSI ne sert à rien dans PowerShell en tant que tel: il est seulement destiné à l'affichage correct des accents ("égal") quand tu copies un code ici dans un fichier texte puis que tu enregistres ce texte sous ps1.
Je ne vois a priori pas d'erreur de syntaxe, quand on a synchronisé les dossiers, le seul résultat doit être l'écho pas de différence en <10> s'il y a une pause.
Testes la partie copie et la partie affichage en recopiant textuellement (sauf le chemin, bien entendu) le code en <38> pour voir éventuellement à quel niveau ça coince.
Commente les lignes 3 à 5 en mettant # devant pour vérifier que l'affichage est correct; vérifie les 2 cas de figure en remplaçant ligne 9 -eq par -ne.
Vérifie maintenant la validité de l'opération de copie en décommentant les lignes 3 à 5 et en laissant la ligne 9 à -eq: tu dois avoir l'affichage des tailles et d'une différence nulle.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question15 mars 2023 à 21:29
J'ai trouvé la solution pour les opérations de suppression/recréation et copie
# Supprimer le dossier destination sur le lecteur D: Remove-Item D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release -Recurse -Force # Recréer le dossier destination sur le lecteur D: New-Item -ItemType Directory -Path D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release # Copier l'intégralité des dossiers et fichiers contenus dans l'origine vers la destination: Copy-Item C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release* D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird -Recurse -Force $orig="C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release" $dest="D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release" $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} Difference = {4:n0} " -f $orig, $to, $dest, $td, $diff } echo . pause
Le seul souci, c'est que la fenêtre se ferme dès la copie terminée, et ne m'affiche pas notre compte-rendu...
15 mars 2023 à 21:41
J'abandonne.
On améliore la sortie écran, on te propose de tester par étapes ce qui ne fonctionne pas, à la place tu écris autre chose y compris en conservant "égal', ça fait tâche, alors qu'en l'état le script doit fonctionner, introduisant de ce fait d'éventuelles autres causes de dysfonctionnement, on n'y arrivera jamais.
16 mars 2023 à 09:02
Cela dit, si tu demandes à la machine d'afficher une différence qui n'est pas définie, elle obéit, elle n'affiche rien...
16 mars 2023 à 12:56
Désolé de te voir réagir ainsi... :(
Ma réponse à ton test du 15 mars 2023 à 20:29 est passée à la trappe dans le fil de discussion. Elle signalait que quand je squizait les opérations de copie et corrigeais les points indiqués, j'avais "Il n'y a pas de difference" alors qu'il y en avait une. Lorsque je précédait d'une copie (ôter les # ligne 3 à 5), j'avais "Difference = 0". Je comprends ton "agacement" à constater une inobservation de tes consignes, vu le mal que tu te donnes, mais ce n'était pas le cas...
Encore une fois, je suis néophyte, et ne comprends pas l'intégralité des consignes suggérées, par exemple "Testes ... le code en <38> pour voir... " me semblait pointer une ligne 38 qui n'existe pas.. Je t'avais aussi exposé cette interrogation...
Encore une fois, pas de péril en la demeure. Ma demande de conseils n'a rien de vital, c'est un pur confort soumis à votre bon coeur...
16 mars 2023 à 16:32
<38> est le numéro du message concerné; si on tronque l'affichage de echo "Différence", on n'a aucune chance de la voir s'afficher.
Si tu préfères comme jee pee la sortie de l'affichage sur une seule ligne ou, pour le moins, à plusieurs lignes obtenues artisanalement en appuyant sur entrée et espace entre les différents affichages, il ne faut pas non plus tronquer la valeur de "Difference" à la dernière ligne, qu'il faut conformer à ce qu'elle est, message <25> ligne 9 (Différence = {4:n0}) si on veut que quelque chose s'affiche.
Si on ne trouve pas le bug dans un script au premier regard, la façon de résoudre, c'est d'isoler chaque étape et/ou d'introduire une ligne echo de la variable concernée pour localiser l'erreur, pas d'écrire autre chose à la place.
Moyennant quoi, si ça ne marche pas après correction de l'affichage (étonnant, mon script en <38> est testé), il faut se reporter à ce que j'ai détaillé en <42> pour localiser l'erreur quitte à demander si on ne comprend pas ce qui y est écrit au lieu de partir dans une autre direction; si ça fonctionne, on aura toujours "Il n'y a pas de différence", pour tester l'hypothèse contraire, remplacer comme illustré en <42> ) -eq par -ne
17 mars 2023 à 13:47
Si tu continues à être fâché avec la ligne de commande, j'ai trouvé par hasard ça qui est assez intéressant.
Gratuit pour une utilisation personnelle, permet de sauvegarder non seulement ses messages mais ses profils et les paramètres du registre si on veut (et aussi pour les navigateurs), programmable en incrémentiel et en tâche planifiée vers tout type de support (local, réseau, Cloud), rendant les éventuelles erreurs de copie.
A l'inconvénient de ne rendre pour une raison curieuse la sortie qu'à un format compressé zip (mais dont on pourra toujours extraire les données), et bien sûr en cas de crash disque ou de formatage de devoir réinstaller le logiciel pour importer la sauvegarde sauf à récupérer manuellement les données du zip sans les paramètres du logiciel de mail.
https://www.commentcamarche.net/telecharger/communication/13407-kls-mail-backup/
19 mars 2023 à 11:59
Merci brucine pour ce lien. J'ai testé ce soft, pas mal du tout... mais....
....corrections faites sur le ps1..... fantastique, ça marche ! Grand merci. Du coup, j'ai Mis une ligne pense-bête pour ajouter ou retirer le # en début les lignes 3 à 5. Ainsi, soit il y a copie avec vérif, soit il y a comparaison seule. Tu as donc résolu mon souci d'un mini-script, rapide et efficace. Peut être existe t'il une commande à ajouter ou retirer pour voir avec plus de transparence les opés de copie, mais je t'avais promis de ne pas en demander trop, et il fait le boulot comme souhaité.
Merci encore !
19 mars 2023 à 12:51
Pour les fioritures, c'est compliqué d'avoir fromage et dessert dans le même "langage".
Pour PowerShell on peut, pourquoi pas, ajouter une barre de progression, mais bon...
Qu'il s'agisse de PowerShell ou de Robocopy, on n'a aucune raison de mettre en évidence des différences de copie après synchronisation puisque par définition il n'y en a pas.
On peut par contre vouloir comparer source et destination avant synchronisation, ie ne lancer le script de synchronisation que si des différences sont mises en évidence.
La syntaxe PowerShell mise en place calcule la taille des dossiers, mais ne compare pas les fichiers et, formellement parlant, bien que peu probable, on pourrait imaginer que des tailles soient identiques avec des fichiers différents.
Une syntaxe Compare-Object pourra y rendre compte de ces différences, mais n'est pas facile à mettre en place, on a vu par contre que Robocopy, mais qui lui est davantage fâché avec l'arithmétique pour rendre la différence de taille de 2 dossiers très différents (ou excédent la limite 32 bits) est le meilleur outil pour le faire via une simple ligne de commande.
Il serait alors peut-être plus simple d'intégrer au PowerShell un préalable Robocopy qui affiche les différences éventuelles en explicitant les fichiers concernés, puis de chaîner vers la synchronisation seulement si cette différence existe; cette synchronisation est d'ailleurs plus simple à écrire en une seule ligne dans Robocopy, ce qui n'amènerait à se servir de la partie PowerShell que pour l'affichage des tailles et le calcul de leur différence.
On peut, pour ne se confiner qu'à ce que l'on veut, diriger la sortie Robocopy vers des variables à l'écran ou un fichier texte temporaire pour n'afficher que les noms et tailles de ces fichiers, et sortir du script sans synchronisation s'il n'y en a pas.
A toi donc de préciser ce que tu souhaites.
19 mars 2023 à 19:13
Tiens, cadeau, j'ai laissé volontairement la ligne rem après SET, l'enlever devant cette ligne et le mettre devant la deuxième ligne SET pour tester les 2 hypothèses.
@echo off
CHCP 65001 >NUL
SET "orig=G:\photos\antibes"
SET "dest=C:\Users\brucine\Desktop\antibes"
rem "dest=G:\photos\antibes"
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
echo .
echo Source ... = %to%
echo Sauvegarde = %td%
echo .
FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e
IF %diff% EQU 0 (
echo ^[32mDifférence = %diff%[0m
echo .
pause
goto end
) else (
echo ^[31mDifférence = %diff%[0m
echo .
goto diff
)
:DIFF
ECHO Fichiers à copier:
ECHO ------------------
FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%dest%" "%orig%" /L /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS
echo .
pause
:PROCESS
ECHO %size% %name%
:END
19 mars 2023 à 19:29
Attention au caractère à copier qui n'apparaît pas avant chaque [
Si la recopie du texte (dans un script cette fois-ci batch cmd, et pas ps1) ne le ramène pas, il s'agit du caractère ESC produit par la combinaison de touches CTRL+[ qu'on peut ensuite copier et coller au kilomètre une fois l'aspect correct obtenu (tout se passe comme s'il y avait un petit rectangle blanc vide avant les [
Pas primordial, mais colore la différence en vert si elle est nulle et en rouge dans le cas contraire.
https://ss64.com/nt/syntax-ansi.html
19 mars 2023 à 19:33
Et bien sûr enlever le /L de ROBOCOPY pour ne pas faire qu'une simulation de copie
19 mars 2023 à 20:26
Si c'est pas top ça ...!
Plus que je l'espérais pour un batch...grand merci et bravo.
Si j'ai bien compris, il repère les différences et m'indique les fichiers incriminés ? Franchement ça va loin..
J'ai juste enlevé les "[32mD" et "[31mD" qui apparaissaient, et remplacé "[0m" par "octets".
Par contre, si j'enlève le "/L" de robocopy, l'ordi travaille 1 seconde, puis me restitue ça
Ce qui me laisse penser qu'il copie de la sauvegarde vers la source..
voici le batch sans "/L"
@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 "dest=G:\photos\antibes" 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 echo . echo Source ... = %to% echo Sauvegarde = %td% echo . FOR /F %%e IN ('powershell %to%-%td%') DO SET diff=%%e IF %diff% EQU 0 ( echo ^Différence = %diff% octets echo . pause goto end ) else ( echo ^Différence = %diff% octets echo . goto diff ) :DIFF ECHO Fichiers à copier: ECHO ------------------ FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%dest%" "%orig%" /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS echo . pause :PROCESS ECHO %size% %name% :END
19 mars 2023 à 20:29
Evidemment, j'aurais du mieux regarder la ligne 30.... :((
C'est ça de vouloir aller trop vite en baissant la tête. Pas de grosses pertes puisque je reçois peu de mails pro le wwekend..
20 mars 2023 à 00:07
Au temps pour moi, j'ai testé n'importe comment puisque en mode simulé source et destination n'ont bien sûr pas d'importance, mais en mode réel il faut bien sûr "robocopier" source vers destination et pas le contraire.
La ligne "rem" est destinée à être supprimée quand on a testé les 2 cas de figure et qu'ils fonctionnent.
La syntaxe echo ^[xxmDifférence = %diff%[0m me retourne la chaîne Différence = %diff% ou n'importe quoi que je mets entre [xxm et [0m en vert si xx = 32 (tout va bien) ou en rouge si xx =31 (je suis alerté que la différence n'est pas nulle).
Si je veux afficher un texte supplémentaire (en l'espèce "octets"), je dois remplacer exactement au même endroit
Différence = %diff% par Différence = %diff% octets (et aussi rajouter octets derrière echo de source et sauvegarde)
mais sans toucher au reste si je veux "bénéficier" de l'effet couleur.
Dans tous les cas de figure, il y a probablement encore du peaufinage derrière en excluant certains types de fichiers:
de mémoire, je n'utilise plus Thunderbird depuis des lustres, les fichiers json, ce sont des fichiers de configuration y compris de session, ce qui signifie qu'ils sont mis à jour dès que je rouvre Thunderbird.
Il faut bien sûr sauvegarder l'intégralité du profil Thunderbird au cas où, mais si je demande à être alerté de nouveaux mails envoyés ou reçus, ce sont les fichiers Mbox qui eux, manque de pot, n'ont pas d'extension mais seulement une localisation.
http://kb.mozillazine.org/Files_and_folders_in_the_profile_-_Thunderbird
Il est probable que pour que les alertes soient valides, il faudrait donc amender une syntaxe Robocopy /L assortie d'un masque d'exclusion (ça fait partie des options Robocopy), sans quoi on risque d'être notifié de fichiers différents à chaque ouverture de Thunderbird même sans mails reçus, ce n'est pas le but, et l'ensemble y compris fichiers de configuration ne serait alors synchronisé que par une syntaxe Robocopy elle entière seulement en même temps que de nouveaux mails.
Ta copie "nulle" ne montre pas que la sauvegarde s'est effectuée dans un sens plutôt que dans l'autre, les tailles ne seraient pas identiques comme ta copie le montre, mais que les 2 sens sont déjà synchronisés: c'est pourquoi, comme tu l'as observé, je teste sur un dossier contenant des photos; je fais une copie de sécurité de l'original ailleurs, puis je copie ce dossier sur le bureau en y supprimant volontairement quelques photos, il représente alors la destination.
Pour les problèmes de "masque" et une fois que le basique est testé comme ci-dessus, je pense qu'il faut faire la même chose du dossier Thunderbird pour tester les éventuels artefacts (comme les fichiers json): copie de sécurité ailleurs, copie à un autre emplacement et copie sur le bureau à laquelle on enlève volontairement 2 ou 3 mails.
On peut plus simplement copier leur dossier à un instant t sur le bureau, même chose à l'instant t+1 dans un autre dossier quand j'ai reçu de nouveaux mails: je vais écraser ce dossier t dans la destination bidon et t+1 dans la source bidon, ce qui va me permettre de recommencer l'opération autant de fois que je veux pour tester en conditions réelles.
20 mars 2023 à 20:08
La bascule de couleur d'affichage 31 ou 32 ne fonctionne pas chez moi.
Par exemple, la fenêtre m'affiche "[31mDifférence = 2521632[0m" et non des chiffres en couleur..
J'utilise pourtant le cmd.exe "classique" de windows
Dommage car la couleur, rouge pour diff, et vert si zéro diff, alerte bien ..
Pour "octets", je sais maintenant ou ajouter la chose
Le dossier "rdwdst72.default-release" contient quasiment ttes les infos : mails, settings, etc.. qui me sont nécessaires de sauvegarder, et les json sont effectivement données de préférences.
En définitive, ce n'est pas tellement important que je saches quels fichiers sont manquants pour mon usage de mails, mais ça pourra être utile pour un autre usage, comme dans ton exemple de photos.
Par exemple celles sur un téléphone, et celles sauvegardées.
Vérification faite par la suite, mon loupé (dest->orig) n'a pas affecté la source. Les tailles indiquées m'ont inquiété pour rien. Ouvrir thunderbird m'a rassuré.
20 mars 2023 à 20:35
je crois me souvenir qu'on avait réussi à afficher les tailles avec séparateur de milliers, mais je confonds peur être et me mélange les pinceaux..
20 mars 2023 à 23:26
Pour les couleurs, je suis blond, je n'arrive plus à reproduire le symbole d'échappement au clavier.
Tu vas sur ce site:
https://gist.githubusercontent.com/mlocati/fdabcaeb8071d5c75a2d51712db24011/raw/b710612d6320df7e146508094e84b92b34c77d48/win10colors.cmd
Tu copies tout et tu colles dans un fichier que tu appelles par exemple color.cmd, tu mets une pause à la dernière ligne, ce qui m'intéresse, ce sont les petits rectangles qu'on n'arrive pas à rentrer; si tu veux du rouge, c'est la première ligne 31m Red qui te concerne.
Tu effaces tout ce qui précède le premier crochet SAUF le petit rectangle, donc ^<ESC^>[31m y compris l'espace après m, il ne reste plus qu'à remplacer Red par le blabla voulu Différence = %diff% octets
Concernant le séparateur de milliers, il apparaît dans les "calculs" de par exemple une commande DIR, mais pas dans la sortie Powershell; si tu y tiens, il faut écrire un script supplémentaire qui insère avant l'écho un espace tous les 3 caractères à partir de la droite (ou qui fait des divisions successives par 1000, mais on va retomber sur le même travers si le nombre dépasse la limite 32 bits).
Je n'ai pas envie ce soir, j'étudierai la chose demain.
20 mars 2023 à 23:48
En batch, c'est compliqué, en PowserShell, les doigts dans le nez:
Mettre après les 2 premières condition FOR 2 autres:
FOR /F %%g in ('powershell -c "'{0:N0}' -f %to%"') do set to1=%%g
FOR /F %%h in ('powershell -c "'{0:N0}' -f %td%"') do set td1=%%h
Remplacer dans l'echo Source et Sauvegarde to et td par to1 et td1
Après la ligne FOR qui calcule la différence, même chose avec:
FOR /F %%i in ('powershell -c "'{0:N0}' -f %diff%"') do set diff1=%%i
et à suivre les %diff% d'echo par %diff1%
Il y a évidemment moyen de faire ça de manière plus élégante en une seule ligne PowerShell mais ça me fatigue, c'est plus simple comme ça, et je ne raffole pas de l'idée de calculer sur des nombres où les milliers sont séparés.
21 mars 2023 à 11:16
Comme disent les libraires, édition revue et augmentée spécifique à Thunderbird, et qui ne fonctionnera évidemment pas en cas de MAJ Thunderbird, la synchronisation sera alors forcée au mail reçu suivant.
-Pour les retours à la ligne, j'ai remplacé echo . par echo: , c'est plus décoratif
-J'ai exclu dans TESTDIFF les fichiers txt, en ce qui te concerne, ce sont les fichiers jsonlz4 s'il n'y a pas d'autre parasite.
-Je suis parti du principe que, en l'absence de nouveau mail, il n'y a pas de différence en dehors des fichiers de configuration: il ne sert à rien d'afficher les tailles et différence, on va directement à NOCOPY
-Dans le cas contraire, à partir de la section DIFF, on affiche les tailles et la différence, on liste les fichiers qui seront copiés, on fait la copie confirmée par un message.
@echo off
CHCP 65001 >NUL
echo ^[93mSAUVEGARDE THUNDERBIRD[0m
SET "orig=G:\photos\antibes"
SET "dest=C:\Users\brucine\Desktop\antibes"
rem "dest=G:\photos\antibes"
:TESTDIFF
FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%dest%" "%orig%" /L /XF *.txt /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g
ECHO %size%>size.txt
FOR /F "tokens=1 delims= " %%m IN ('type "size.txt"') DO SET testsize=%%m
IF %testsize%==Commande (
GOTO NOCOPY
) else (
GOTO DIFF
)
: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 %%g in ('powershell -c "'{0:N0}' -f %to%"') do set to1=%%g
FOR /F %%h in ('powershell -c "'{0:N0}' -f %td%"') do set td1=%%h
echo:
echo Source ... = %to1% octets
echo Sauvegarde = %td1% octets
echo:
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 ^[31mDifférence = %diff1% octets (dont fichiers de configuration)[0m
echo:
ECHO Fichiers à copier:
ECHO ------------------
FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%dest%" "%orig%" /L /XF *.txt /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS
echo:
echo ^[32mSauvegarde effectuée le %date%[0m
echo:
pause
:PROCESS
ECHO %size% %name%
GOTO END
:NOCOPY
echo ^[32mIl n'y a pas de nouveau mail, pas de synchronisation[0m
pause
:END
DEL size.txt
21 mars 2023 à 16:45
A :END il faut lire:
IF exist size.txt DEL size.txt
Plus propre, on exclut directement dans PowerShell et plus dans Robocopy, les tailles sont rendues après exclusion (donc sans les fichiers de configuration), on n'a plus besoin de tester la valeur de différence autrement que par celle entre source et destination hors fichiers de configuration, le tout au format séparateur de milliers, ce qui donne ça:
@echo off CHCP 65001 >NUL SET "orig=G:\photos\antibes" SET "dest=C:\Users\brucine\Desktop\antibes" rem "dest=G:\photos\antibes" echo ^[93mSAUVEGARDE THUNDERBIRD[0m echo: :DIFF FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse -Exclude:*.txt| Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.txt| 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 -Exclude:*.txt| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.txt| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets echo: echo ^[31mDifférence = %diff1% octets[0m echo: ECHO Fichiers à copier: ECHO ------------------ FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%dest%" "%orig%" /L /XF *.txt /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS echo: echo ^[32mSauvegarde effectuée le %date%[0m echo: pause :PROCESS ECHO %size% %name% GOTO END :NOCOPY echo: echo ^[32mIl n'y a pas de nouveau mail, pas de synchronisation[0m echo: pause :END
21 mars 2023 à 20:50
Bonsoir brucine, et merci
Voici la fenêtre après exécution de ton dernier script
La taille source est bonne , mais la taille dest est 9 055 789 172 octets, ce qui n'est pas reporté dans la fenêtre .
La différence est donc incorrecte.
J'ai testé le script du site que tu conseilles. Je n'ai que des lignes :
[0m
'[0m' n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
Quoique je fasse, même les modifs que tu conseille, je n'arrive pas, soit avec le script du site, soit avec ton dernier script, à obtenir des couleurs (d'ou les [93mxxxx[0m, [31mxxxx[0m ou [32mxxxx[0m qui apparaissent en texte...
Mon cmd.exe serait il corrompu ?
Quel gachis car je vois qu'en plus, tu as fait apparaitre la date de sauvergarde, etc...
21 mars 2023 à 21:01
Le site n'acceptant pas ma copie d'écran, voici ce que j'obtiens en lançant le batch en admin
[93mSAUVEGARDE THUNDERBIRD[0m
La variable d’environnement D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release n’est pas définie.
[93mSAUVEGARDE THUNDERBIRD[0m
Taille hors fichiers de configuration:
--------------------------------------
Source.... = 9 071 084 498 octets
Sauvegarde = Get-ChildItem octets
Sauvegarde = Au octets
Sauvegarde = + octets
Sauvegarde = + octets
Sauvegarde = + octets
Sauvegarde = edAccessException octets
Sauvegarde = + octets
Sauvegarde = 5 691 922 118 octets
[31mDifférence = 3 379 162 380 octets[0m
Fichiers à copier:
------------------
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
Commande ECHO désactivée.
[32mSauvegarde effectuée le 21/03/2023[0m
Appuyez sur une touche pour continuer...
21 mars 2023 à 21:29
C'est le résultat du script entier mis à ma sauce :
@echo off
CHCP 65001 >NUL
echo ^[93mSAUVEGARDE THUNDERBIRD[0m
SET "orig=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release"
SET "D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release"
rem "dest=G:\photos\antibes"
echo ^[93mSAUVEGARDE THUNDERBIRD[0m
echo:
:DIFF
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse -Exclude:*.txt| Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a
FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.txt| 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 -Exclude:*.txt| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.txt| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets
echo:
echo ^[31mDifférence = %diff1% octets[0m
echo:
ECHO Fichiers à copier:
ECHO ------------------
FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%dest%" "%orig%" /L /XF *.txt /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS
echo:
echo ^[32mSauvegarde effectuée le %date%[0m
echo:
pause
:PROCESS
ECHO %size% %name%
GOTO END
:NOCOPY
echo:
echo ^[32mIl n'y a pas de nouveau mail, pas de synchronisation[0m
echo:
pause
:END
22 mars 2023 à 00:32
ç'est fatigant, si tu fais ta sauce, suis la recette: tu ne lis pas ce que t'on écrit et tu n'en tiens aucun compte; évites les "typos" de recopie, il suffit de recopier le script textuellement en changeant juste source, destination et extensions concernées, sans quoi ça sert à quoi que comme Ducros je me décarcasse...
Sans chercher pour l'instant plus loin:
SET "D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release"
ne peut pas fonctionner puisque, en effet, la variable n'est pas définie, ce qu'une simple relecture aurait permis de déceler.
SET "dest=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release"
Concernant les couleurs, je t'ai déjà fait apparaître que la copie simple du script texte ne ramène pas l'indispensable caractère d'échappement, tu ne dois pas servilement copier à défaut de pouvoir l'appeler au clavier par une syntaxe qui m'échappe:
echo ^[93mSAUVEGARDE THUNDERBIRD[0m
mais aller télécharger le lien indiqué en <59> et dont contenu texte enregistré sous color.cmd ou ce que l'on veut; je vais maintenant y copier seulement ce qui ressemble à ^[nnmblabla[0m (sans ce qu'il y avant que je supprimerai), le but étant de copier le caractère "rectangle" qui existe entre ^ et [ et entre blabla et [
Après, je copie-colle au kilomètre cette syntaxe dans toutes les autres occurrences et je modifie seulement nn et blabla selon ce qui est pertinent.
Même si l'importance est secondaire pour l'exécution du script sans erreur de forme, tu ne peux pas non plus recopier servilement un masque d'exclusion -Exclude:*.txt ou /XF *.txt: je t'ai aussi fait apparaître que, dans ton cas de figure et si d'autres fichiers ne viennent pas à s'en mêler, l'extension pertinente n'était pas *.txt mais *.jsonlz4, voir en <61>: j'ai personnellement testé et comme tu l'as toi-même remarqué avec des photos jpg à la place des mails et des fichiers txt bidon (mais non vides) à la place des jsonlz4.
Une fois tout cela corrigé et si le problème persiste, je rappelle que la syntaxe ROBOCOPY reste simulée tant qu'on n'enlève pas /L (tant mieux tant qu'on n'a pas simulé tous les cas de figure sur, comme je l'ai aussi indiqué, les dossiers source et destination copiés chacun à un endroit bidon et bien sûr les chemins amendés en conséquence) de sorte à supprimer volontairement et alternativement quelques mails et les fichiers jsonlz4 de la destination pour vérifier ce qu'il se passe.
Enfin, concernant les valeurs de copie négative, j'ai au moins en simulation, mais pas de raison que cela se comporte différemment en réel, à tester, un rendu paradoxal de la commande ROBOCOPY (ce qu'il y a entre delims= et " est une tabulation par la touche adéquate)
FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%dest%" "%orig%" /L /XF *.txt /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS
où %dest% vers %orig% n'est curieusement pas un typo, les valeurs sont négatives pour l'inverse montrant que la copie s'effectue alors dans le mauvais sens, mais c'est un problème secondaire: on met l'un avant l'autre ou vice-versa jusqu'à constater en simulation que la taille %orig% est plus grande que %dest% (tout au moins quand on a viré des fichiers de la destination bidon) et la différence positive.
22 mars 2023 à 00:43
Je ne le fais pas, mais je devrais le faire comme tout le monde: l'usage sécurisé veut qu'on ne désigne pas une variable par un mon qui risque de la faire confondre avec un mot ou une commande (var, %var%, %%var) mais par un caractère improbable empêchant toute confusion (par exemple _var, %_var%, %%_var)
22 mars 2023 à 10:45
On y arrive...
Effectivement, j'avais mangé le "dest=" en ligne 5 par un mauvais copier/collé... erratum !
Concernant la couleur de txt, c'est ce sacré "petit carré" qui manquait avant [93m et [0m qui encadrent le texte. Ce caractère (zéro sous Wingdings 2) n'apparaît pas sur ce forum, quelles que soient dans les options de langue de "insérer un extrait de code" choisies.
J'ai donc, moins "servilement" ;) remplacé *.txt par *.*.jsonlz4, mais il continue de m'afficher les lignes incriminées. Ceci dit, ce n'est pas trop grave car le reste du script fonctionne sacrément bien ! Merci
22 mars 2023 à 10:46
*.jsonlz4 et non *.*.jsonlz4.....
22 mars 2023 à 12:22
Je ne peux pas t'aider beaucoup sur ce point, je n'utilise pas Thunderbird, il faut ouvrir le fichier Profil pour voir la syntaxe.
Sous Firefox, ils s'appellent addonStartup.json.lz4, il y a un point entre json et lz4, et l'extension est un format de compression .lz4
22 mars 2023 à 11:10
Penses tu qu'il soit facile de fonctionner ainsi, plutot que retirer manuellement le /L de robocopy ?
22 mars 2023 à 12:04
Tu peux faire 2 scripts. Un verification.cmd et un sauvegarde.cmd
22 mars 2023 à 12:31
Bonjour,
On peut toujours en effet, mais le /L n'est destiné qu'à simuler l'opération tant qu'on n'a pas trouvé les paramètres appropriés: quand c'est fait, on l'enlève normalement définitivement.
Si on veut malgré avoir ôté ce commutateur un choix de faire la sauvegarde ou pas, la solution la plus simple consiste à entrer une syntaxe CHOICE avant "ECHO fichiers à copier" ou "ECHO Taille hors fichiers de configuration:", qui dirige sur la suite si O(ui) et si N(on) soit directement sur :END, soit par exemple sur une étiquette précédente :CONFIRM avec quelque chose du genre "ECHO Attention sortie sans sauvegarde!"
https://ss64.com/nt/choice.html
22 mars 2023 à 17:30
J'ai tenté de me débrouiller seul, avec ces quelques explications..
Mon commutateur CHOICE semble fonctionner. Si je répond N, la fenêtre se ferme, c'est ce que je voulais, mais si je répond O, ça bloque, la fenêtre se gèle. Les 2 commandes FOR /F %%a IN (' situées après ROBOCOPY, sensées me restituer des valeurs ne s'affichent pas..
Je n'ai que quelques vielles notions de basic, et le batch me parle peu, donc je cumule les erreurs sans le voir et le savoir... Help..
@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 "dest=G:\photos\antibes" echo ^[93mSAUVEGARDE THUNDERBIRD[0m echo: :DIFF FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.jsonlz4| 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 -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets echo: echo ^[31mDifférence = %diff1% octets[0m echo: @echo off CHOICE /C ON /M "Proceder a la sauvegarde" IF %ERRORLEVEL% EQU 1 GOTO COPY IF %ERRORLEVEL% EQU 2 GOTO END :COPY ECHO Fichiers à copier: ECHO ------------------ FOR /F "skip=1 tokens=1-5 delims= " %%f IN ('ROBOCOPY "%orig%" "%dest%" /XF *.txt /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS ECHO -------------------------------------- FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets echo ^[32mSauvegarde effectuée le %date%[0m echo: pause :PROCESS ECHO %size% %name% GOTO END :NOCOPY echo: echo ^[32mIl n'y a pas de nouveau mail, pas de synchronisation[0m echo: pause :END
22 mars 2023 à 18:13
La syntaxe semble pourtant correcte, enlèves la ligne @echo off en 29 et écris plutôt:
CHOICE /C ON /M "Procéder à la sauvegarde O/N"
c'est plus clair.
Mais si la différence est nulle, la ligne 16 va t'amener directement à :NOCOPY en shuntant ta commande CHOICE.
Si on veut alors continuer à systématiquement ne pas faire une sauvegarde nulle, il faut couper-coller la ligne 16 en une nouvelle ligne insérée en 35.
Si ça continue à ne pas fonctionner, teste %ERRORLEVEL% en remplaçant les GOTO lignes 31 et 32 par respectivement ECHO toto et tata suivis d'une nouvelle ligne pause.
Si l'affichage est correct, s'assurer que les étiquettes sont bien dirigées en écrivant ces ECHO toto et tata suivis de pause juste en-dessous des lignes 34 et 57 et/ou fais une copie de la ligne 47 sous 38 suivie de pause pour vérifier la syntaxe ROBOCY.
Pense à modifier ton masque d'exclusion jslonlz4 selon la syntaxe exacte, probablement .lz4
22 mars 2023 à 20:57
Bonsoir,
Shunter la commande CHOICE en cas d'égalité me convient, car la demande de copie n'a plus d'utilité si la sauvegarde est à jour.
A vrai dire, la copie des json ne me dérange pas, au contraire, donc le filtre d'exclusion ne me servira pas. Le seul souci est que j'avoue ne pas savoir exactement quels caractères enlever pour virer ce filtre sans corrompre la syntaxe de la commande....
Lorsque j'enlève les lignes 39 et 40
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets
FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Sauvegarde = %%a octets
.. la copie fonctionne bien.
Je souhaiterais juste que s'affiche les tailles des 2 dossiers (orig+dest) pour, de visu, vérifier qu'elles sont identiques..
23 mars 2023 à 00:31
J'étais un peu à la bourre tout à l'heure, j'ai lu ton script en diagonale, l'erreur n'a rien à voir avec CHOICE ni les exclusions, mais avec un artefact de ROBOCOPY qui n'affiche via /L les fichiers à copier que de %dest% vers %orig% alors que la copie réelle ne s'effectue évidemment que de %orig% vers %dest%.
Le subterfuge consiste donc à mettre 2 lignes ROBOCOPY successives inversées, la première simulée, la deuxième réelle.
ATTENTION: la deuxième est réelle; si on veut tester le reste du script, on y met /L et on n'aura pas de copie, si on veut tester en temps réel sans prendre de risque, on fait une copie du script dans un autre dossier, on le renomme, on le coupe-colle à côté de l'autre.
On fait une copie du Profil Thunderbird dans un autre emplacement du disque, je ne vais pas me compliquer la vie, je copie seulement le dossier par exemple sur le bureau pour donner C:\Users\xxx\Desktop\rdwdst72.default-release et je crée un dossier de destination bidon sur le bureau par exemple C:\Users\xxx\Desktop\test, je modifie bien sûr les 2 SET initiaux des dossiers en conséquence.
J'ai assumé que l'extension exclue était en fait .jsonlz4, je fais une copie quelconque d'un de mes fichiers txt non vides sur le bureau (ou j'en crée un dans lequel je rentre les 10 premières phrases qui me passent par la tête), je le renomme tartempion.jsonlz4 et je le copie dans ma source du bureau.
Si l'expérience n'est pas concluante (elle l'est chez moi) ou si je ne veux pas exclure, je supprime -Exclude:*.jsonlz4 dans les commandes PowerShell et /XF *.jsonlz4 dans les commandes ROBOCOPY.
J'ai rajouté tout en bas une fioriture rouge de Sortie sans sauvegarde, il faut comme pour les autres copier une mise en forme correcte pour respecter les caractères d'échappement.
Nous avons donc les copies d'écran pour réponse Non et Oui quand il y a des différences et le script modifié en conséquence.
@echo off CHCP 65001 >NUL SET "orig=G:\photos\antibes" SET "dest=C:\Users\brucine\Desktop\antibes" echo ^[93mSAUVEGARDE THUNDERBIRD[0m :DIFF FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %orig% -Recurse -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum"') DO SET to=%%a FOR /F %%b IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.jsonlz4| 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 -Exclude:*.jsonlz4| Measure-Object -Property Length -Sum).Sum.ToString('N0')"') DO echo Source.... = %%a octets FOR /F %%a IN ('powershell.exe -Command "(Get-ChildItem %dest% -Recurse -Exclude:*.jsonz4| 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 "%dest%" "%orig%" /L /XF *.jsonlz4 /MIR /NP /NJH /NDL /NFL /NJS') DO SET size=%%g & SET name=%%h & CALL :PROCESS echo: ROBOCOPY "%orig%" "%dest%" /XF *.jsonlz4 /MIR /NP /NJH /NDL /NFL /NJS echo ^[32mSauvegarde effectuée le %date%[0m echo: pause :PROCESS ECHO %size% %name% GOTO END :NOCOPY echo: echo ^[32mIl n'y a pas de nouveau mail, pas de synchronisation[0m echo: pause GOTO END :QUIT echo: echo ^[31mSortie sans sauvegarde[0m echo: pause :END
23 mars 2023 à 00:46
Si je veux l'affichage des tailles source et destination et de la différence même quand elle est nulle, tous les goûts sont dans la nature, je coupe la ligne 14 que je place ligne 24.
23 mars 2023 à 09:56
J'en reviens aux fichiers de configuration.
Je ne sais pas si la sauvegarde en est utile; je ne sais pas s'ils ne sont pas recréés automatiquement ni s'il ne suffit pas, en cas de crash, de réinstaller Thunderbird ou pas et d'écraser les mails de la source par ceux de la sauvegarde.
Dans le doute, on va assumer que oui et qu'il faut les sauvegarder dans la seule ligne de copie réelle et donc enlever le paramètre d'exclusion ligne 37:
ROBOCOPY "%orig%" "%dest%" /MIR /NP /NJH /NDL /NFL /NJS
Par contre, ne pas les maintenir pour le calcul de la différence n'est pas une bonne idée: comme ils changent à chaque ouverture de session, elle ne sera jamais nulle et on n'ira donc jamais à NOCOPY. Il faut donc en identifier la syntaxe, *.jsonlz4 devrait suffire, mais on peut toujours avoir un doute du fait des doubles extensions style:
1675442042500.4a24979c-854e-4318-893c-4884c79ffdc6.new-profile.jsonlz4
Dans ce cas de figure, tester dans une ligne de commande séparée jusqu'à obtenir le bon résultat. Tu vas te rendre dans le dossier rendu par ta copie d'écran en <69> et te placer sur n'importe lequel de ces fichiers lz4, clic droit, propriétés, copier tout ce qui se trouve dans "Emplacement" dans le batch qui suit à la place de "test":
@echo off
CD /D test
dir *lz4
pause
Chez moi, ça fonctionne en se contentant de *lz4, tester si la commande dir ne ramène rien par *.lz4en remplaçant *jsonlz4, *.jsonlz4 ou en faisant précéder tout cela de *. jusqu'à ce qu'il y ait une sortie (tenir compte de la double extension précédente, voir ma deuxième copie d'écran ci-dessus).*. Noter que ces fichiers jsonlz4 sont majoritairement sinon tous placés dans le dossier datareporting: ils ne représentent donc que de la télémétrie, l'oeil de Moscou à destination de Mozilla. Si je suis fâché avec l'exclusion par fichiers du style /XF *.jsonlz4 dans ROBOCOPY je peux la remplacer par /XD (chemin du dossier datareporting) mais dans PowerShell une syntaxe -Exclude:(dossier) au lieu de -Exclude:(fichier) exclut des noms désignés, pas des chemins. Il n'y a pas de solution simple, je reviens si j'en trouve une capillotractée et que l'exclusion par fichier ne suffit pas.
15 mars 2023 à 13:13
Je te garantis que ça, ça fonctionne parfaitement sur les 2 étapes, y compris si je l'exécute d'une partition non système; j'ai modifié l'écho pour ne pas avoir à rentrer approximativement les espaces et le retour à la ligne à la main.
Ne pas appeler un fichier d'un nom de commande, que ce soit Powershell.ps1 ou shutdown.cmd, ça m'a valu des surprises par le passé où l'interpréteur de commandes analyse le nom du fichier comme une commande, renommer toto.ps1 ou ce que tu veux.