Script batch incorrect :(
brucine Messages postés 23023 Statut Membre -
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..
- Script batch incorrect :(
- Script vidéo youtube - Guide
- Fichier batch - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Batch installation id c'est quoi - Forum Mobile
101 réponses
Et si on veut continuer à utiliser le script Thunderbird seul, il faut modifier les variables de destination et supprimer heures et minutes:
@echo off
MD %~dp0_temp
:DATE
FOR /F "usebackq" %%i IN (`PowerShell $date ^= Get-Date^; $date ^= $date^; $date.ToString^('ddMMyyyy'^)`) DO SET destinit=%%i
DIR /B %Appdata%\Thunderbird\Profiles\ >> %~dp0_temp\_thunder.txt
FOR /F %%v IN ('FINDSTR "release" %~dp0_temp\_thunder.txt') DO SET nomthunder=%%v
SET "orig=%AppData%\Thunderbird\Profiles\%nomthunder%"
SET "dest=E:\bibi\Pro\Documents\Sauvegardes_pro\Mails_thunderbird"
echo:
ECHO ^[104;93mSAUVEGARDE THUNDERBIRD[0m
echo:
IF NOT EXIST %dest%\%destinit% GOTO VIERGE
GOTO SIZEMAILDEBUT
:VIERGE
MD %dest%\%destinit%
:SIZEMAILDEBUT
CHCP 1252 >NUL
XXCOPY %orig%\Mail C:\_TEMPD /L /Q3 /CBQ /CLONE /YY >> %~dp0_temp\_Mailorigdebut.txt
XXCOPY %dest%\%destinit%\Mail C:\_TEMPD /L /Q3 /CBQ /CLONE /YY >> %~dp0_temp\_Maildestdebut.txt
XXCOPY %orig%\Mail %dest%\%destinit%\Mail /L /Q3 /CBQ /CLONE /YY >> %~dp0_temp\_Maildiffdebut.txt
FOR /F "tokens=1,2 delims==" %%g IN ('FINDSTR "Total" %~dp0_temp\_Mailorigdebut.txt') DO SET sizemailorigdebut=%%h
FOR /F "tokens=1,2 delims==" %%i IN ('FINDSTR "Total" %~dp0_temp\_Maildestdebut.txt') DO SET sizemaildestdebut=%%j
FOR /F "tokens=1,2 delims==" %%k IN ('FINDSTR "Total" %~dp0_temp\_Maildiffdebut.txt') DO SET sizemaildiffdebut=%%l
CHCP 65001 >NUL
ECHO ^[104mTaille Mails:[0m
echo Mails Source = %sizemailorigdebut% octets
echo Mails Sauvegarde = %sizemaildestdebut% octets
set diff1maildebut=%sizemaildiffdebut:~1%
set diff2maildebut=%diff1maildebut:~0,1%
IF %diff2maildebut% LSS 1 (
echo ^[103;92mPas de nouveau mail: %sizemaildiffdebut% octets[0m & GOTO NOMAIL
) ELSE (
echo ^[103;91mNouveaux Mails: %sizemaildiffdebut% octets[0m & GOTO CHOICEMAIL
)
:CHOICEMAIL
echo:
ECHO ^[93mSauvegarder les nouveaux mails?[0m
CHOICE /C ON
IF %ERRORLEVEL% EQU 1 GOTO COPYMAIL
IF %ERRORLEVEL% EQU 2 GOTO QUITMAIL
:CHOICEPROFIL
echo:
ECHO ^[93mSauvegarder le Profil?[0m
CHOICE /C ON
IF %ERRORLEVEL% EQU 1 GOTO COPYPROFIL
IF %ERRORLEVEL% EQU 2 GOTO QUIT
:NOMAIL
echo:
echo ^[103;92mVoulez-vous afficher le reste du profil?[0m
CHOICE /C ON
IF %ERRORLEVEL% EQU 1 GOTO SIZEPROFILDEBUT
IF %ERRORLEVEL% EQU 2 GOTO END
:NOCOPY
echo:
echo ^[103;92mDifférence nulle: Synchronisation Profil inutile[0m
GOTO END
:QUIT
echo:
echo ^[103;91mAttention, Synchronisation Abandonnée

