Script batch incorrect :(

Fermé
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 - 11 mars 2023 à 15:38
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 - 28 avril 2023 à 09:45

Bonjour à tous,

Voici un petit fichier .bat qui m'expose la taille de 2 dossiers, (chacun des 2 dossiers comporte plusieurs sous dossiers et fichiers).
Jusque là, tout fonctionne, il m'affiche un 1er résultat en octets, et un second avec séparateurs de milliers.
C'est lorsque je cherche à calculer la différence de taille entre ces dossiers que ça ne va plus. Le résultat est toujours 0...
L'objectif :
* calculer la différence de taille dossier source/cible (ligne : set /a diff=size1-size2)
* afficher le résultat en octets de :taille fichier source - taille fichier cible
* si égalité (taille =0) , afficher message de type "Operation OK", sinon, afficher "Erreur"

@echo off
setlocal enabledelayedexpansion

set "target1=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release"
if not defined target1 set "target1=%cd%"
set "size1=0"
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 (C:) :         %size1% octets

set "target2=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release"
if not defined target2 set "target2=%cd%"
set "size2=0"
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 (D:) :    %size2% octets

set /a diff=size1-size2


set "folder3=C:\Users\bibi\AppData\Roaming\Thunderbird\Profiles\rdwdst72.default-release"
set "folder4=D:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird\rdwdst72.default-release

set "size3=0"
set "size4=0"

for /f "tokens=3" %%i in ('dir /s /a "%folder3%" ^| findstr /i "fichier(s)"') do set size3=%%i
for /f "tokens=3" %%i in ('dir /s /a "%folder4%" ^| findstr /i "fichier(s)"') do set size4=%%i

echo Taille du dossier source : %size3% octets
echo Taille du dossier cible  : %size4% octets
echo Difference : %diff% octets

if %diff% EQU 0 (
  echo Operation OK
) else (
  echo Erreur
)

pause

Et voici le retour :

 Taille source (C:) :         8965660753 octets
 Taille destination (D:) :    8965506493 octets
Taille du dossier source : 8 965 660 753 octets
Taille du dossier cible  : 8 965 506 493 octets
Difference : 0 octets
Operation OK
Appuyez sur une touche pour continuer..

Ou peut être mon erreur ?
Je n'y connais rien en script batch et ne pourrai le dire, n'ayant fait qu'accumuler des lignes de commmande piochées à droite et à gauche..

101 réponses

bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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

1
jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024 9 221
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.

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785 > jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024
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.

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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é ?

1

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%

0
jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024 9 221
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


0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785
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



 

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PierrotLeFou
11 mars 2023 à 19:00

En 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
)

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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 ?

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785
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





 

0

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

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785
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


 

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785 > brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024
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.

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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.

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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... ;)

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
12 mars 2023 à 12:42

"IH" pardon, et non "IU"

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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...

0
jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024 9 221
12 mars 2023 à 13:19

en 11 et 12 tu as un blanc en trop sur % size_

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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
0
jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024 9 221
12 mars 2023 à 16:05

ce doit être dir /s pour les sous-dossiers

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785 > jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024
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

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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
0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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 ?

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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".

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785
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...

0
jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024 9 221
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...:

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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 ?

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785
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
0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785 > brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024
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

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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 ?

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785
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"
0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785 > brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024
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
0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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"
0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785
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.

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 785 > brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024
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

 

0
bibi2224 Messages postés 95 Date d'inscription vendredi 10 mars 2023 Statut Membre Dernière intervention 19 octobre 2023 2
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...

0