Programmation batch.... - Page 2
Répondre à la discussion
Page 2 sur 3 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 61

Programmation batch....



  1. #31
    pm42

    Re : Programmation batch....


    ------

    Citation Envoyé par vgondr98 Voir le message
    Bonjour, si tu as beaucoup de fichiers, le bash n'est pas adapté, je pense que c'est trop lent.
    Basé sur quoi ? Bash va juste appeler des commandes écrites en C, il va être très rapide sur ce genre de tâche comme tout autre langage de scripting parce que c'est les entrée-sorties qui prennent du temps.

    -----

  2. #32
    bibi2223

    Re : Programmation batch....

    Je vais tester..
    Merci !

  3. #33
    bibi2223

    Re : Programmation batch....

    Testé ! merci
    HashMyFiles v2.43 me retourne effectivement l'empreinte numérique des fichiers et leur intégrité, mais je souhaite juste retrancher les valeurs size1 et size2 pour qu'il me donne la différence en octets.
    La valeur de cette différence (size1-size2=) me suffirait amplement.

  4. #34
    umfred

    Re : Programmation batch....

    Citation Envoyé par bibi2223 Voir le message
    C'est CHATGPT qui m'a proposé
    Code:
    set "size1=%size1: =%"
    set "size2=%size2: =%"
    J'avoue ne pas comprendre non plus ces lignes...
    et si tu supprimais ces 2 lignes pour voir ?

  5. #35
    bibi2223

    Re : Programmation batch....

    Malheureusement, ça ne marche pas mieux...

    Pour plus de clarté, voici mon script complet.
    J'y ai ajouté la demande d'affichage du résultat, avec séparateur de milliers, dans une fenêtre windows :
    Code:
    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 dessous, la fenêtre que je souhaiterais obtenir :
    Nom : affichage du résultat.jpg
Affichages : 145
Taille : 50,9 Ko

  6. #36
    umfred

    Re : Programmation batch....

    Du coup c'est un problème d'afficher la 3ème ligne ou de faire le calcul de la différence ?
    Code:
    set /a diff = size1-size2
    ...
    echo MsgBox "Taille source (C:) : " ^& FormatNumber(!formatted_size1!, 0, True) ^& " octets" ^& vbCrLf ^& "Taille cible (D:) :    " ^& FormatNumber(!formatted_size2!, 0, True) ^& " octets" ^& vbCrLf ^& "Différence: " ^& Format(!diff!,0,True) ^& " octets", vbOKOnly, "Resultat du backup" > %temp%\temp.vbs
    ça devrait fonctionner

  7. #37
    bibi2223

    Re : Programmation batch....

    Il me semble avoir inséré les lignes au bon endroit, mais le résultat obtenu est :
    Images attachées Images attachées  

  8. #38
    umfred

    Re : Programmation batch....

    j'ai mis Format au lieu de FormatNumber sur la ligne du MessageBox, my bad; donc faire le remplacement du nom de la fonction.

  9. #39
    ArchoZaure

    Re : Programmation batch....

    Bonjour.

    Citation Envoyé par bibi2223 Voir le message
    Si quiconque a une solution constructive, ce sera avec plaisir.
    Concernant l'efficacité défaillante de ChatGPT dans le domaine de l'informatique (il cause il cause mais comme pour certains ça ne fournit rien de concret ) il faut savoir que lorsque vous engagez une "nouvelle" session sur le site de ChatGPT, elle n'est pas vierge.
    Les concepteurs ont de base demandé à l'IA de se comporter comme un Bot "qui tchate", ce qui en fait un beau parleur certes mais alors qu'il pourrait être plus technique il ne se tient pas à son rôle.
    Mais quel rôle au fait ?
    Il faut bien qu'il choisisse parmi plusieurs possibilités, donc du coup, une fois il fait un truc bien (en informatique) et une autre fois c'est n'importe quoi.
    Il faut donc EFFACER la demande des concepteurs, lui demander d'oublier ce qui lui a été dit "avant" le démarrage de la session. Et aussi lui demander de se comporter comme un programmeur sénior avec 15 ans d'expérience.

    On a donc "la phrase magique" à mettre en préambule de toute discussion avec ChatGPT, expliquée ici :
    https://www.youtube.com/watch?v=rnDbi8gti0U
    Dernière modification par ArchoZaure ; 13/03/2023 à 19h37.

  10. #40
    umfred

    Re : Programmation batch....

    Citation Envoyé par bibi2223 Voir le message
    Il me semble avoir inséré les lignes au bon endroit, mais le résultat obtenu est :
    Citation Envoyé par umfred Voir le message
    j'ai mis Format au lieu de FormatNumber sur la ligne du MessageBox, my bad; donc faire le remplacement du nom de la fonction.
    Après correction, ça donne quoi alors ?

  11. #41
    bibi2223

    Re : Programmation batch....

    @umfred
    Merci
    Nom : copie-ecran5.jpg
Affichages : 107
Taille : 35,6 Ko

    Ca marche mais le calcul est incorrect...

    Voici le script complet avec modifs pour + de clarté :
    Code:
    @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!"
    set /a diff = size1-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" ^& vbCrLf ^& "Différence: " ^& FormatNumber(!diff!,0,True) ^& " octets", vbOKOnly, "Resultat du backup" > %temp%\temp.vbs
    
    start /wait %temp%\temp.vbs
    del %temp%\temp.vbs
    exit

  12. #42
    bibi2223

    Re : Programmation batch....

    @ArchoZaure
    Bonjour. Je teste CHATGPT depuis 1 bon moment. Beaucoup à en dire...
    J'ai même tenté de le faire "dessiner". Voici mon message :
    Bonjour. Je souhaite dessiner une croix verticale de 2 cm de hauteur. Voici la règle : le code "1N" = déplacer le crayon d'un centimètre vers le NORD en traçant une ligne , le code "1O" = déplacer le crayon d'un centimètre vers l'OUEST en traçant une ligne , "3E" = déplacer le crayon de 3cm vers l'EST en traçant une ligne , et ainsi de suite... Si un "R "précède le code de déplacement, le crayon se déplace sans tracer de ligne. Donc le code "R1N" = déplacer le crayon d'un centimètre vers le NORD sans tracer de ligne, "R2S" = déplacer le crayon de 2cm vers le SUD sans tracer de ligne, et ainsi de suite... La position du crayon est toujours relative à sa dernière position. Objectif : dessiner une croix verticale à 4 branches, mesurant chacune 1cm. Quel suite de codes y parvient ?

    Il indique avoir bien compris la règle et l'objectif, mais répète sans cesse ses erreurs. Et moi qui souhaitais lui faire dessiner une forme globale de visage avec 2 yeux, un nez et une bouche....

    Il y aurait beaucoup à dire sur cette IA, mais comme ce n'est pas le sujet de la discussion, je ne vais continuer à en parler ici.
    Merci pour ton astuce très efficace.

  13. #43
    umfred

    Re : Programmation batch....

    chez moi ton code fonctionne
    Nom : test_size.PNG
Affichages : 105
Taille : 3,9 Ko
    je l'ai lancé depuis une invite de commande ouvert en tant qu'administrateur (ou via un clic droit "Executer en tant qu'administrateur"

  14. #44
    bibi2223

    Re : Programmation batch....

    Bonjour,
    Mon script est identique à celui posté plus haut, à la virgule près.
    Le batch lancé en admin me restitue toujours la fenêtre postée plus haut.
    D'ou pourrait venir le problème ? La racine qui diffère ?

  15. #45
    bibi2223

    Re : Programmation batch....

    et depuis cmd.exe en admin :
    Nom : Fenetre2.jpg
Affichages : 97
Taille : 45,3 Ko
    Dernière modification par bibi2223 ; 15/03/2023 à 11h22.

  16. #46
    umfred

    Re : Programmation batch....

    là ça te signale une erreur de syntaxe dans le vbs généré, au niveau du 47ème caractère, étrange.

    Sinon j'avais testé avec 2 répertoires sur le même lecteur et 2 répertoires sur des lecteurs différents, et dans les 2 cas, cela a fonctionné chez moi.
    Tu as fait l'essai avec 2 répertoires de C: par exemple ?

    La seule différence qu'il peut y avoir, sont les modifs que tu dis avoir faites pour plus de clarté quand tu as mis ton dernier code

  17. #47
    bibi2223

    Re : Programmation batch....

    Voici le script
    Code:
    @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!"
    set /a diff = size1-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" ^& vbCrLf ^& "Différence: " ^& FormatNumber(!diff!,0,True) ^& " octets", vbOKOnly, "Resultat du backup" > %temp%\temp.vbs
    
    start /wait %temp%\temp.vbs
    del %temp%\temp.vbs
    exit
    et voici la fenêtre qui résulte de son exécution
    Nom : Fenetre3.jpg
Affichages : 95
Taille : 34,6 Ko

    Je ne comprends pas d'ou vient ce souci de calcul....
    Je devrais avoir Différence: 1 138 504 octets
    Dernière modification par bibi2223 ; 15/03/2023 à 15h21.

  18. #48
    umfred

    Re : Programmation batch....

    de nouveau ça fonctionne chez moi en copiant/collant ton code dans un nouveau fichier .bat

    Essai de remonter le setlocal juste après le @echo off du début

  19. #49
    bibi2223

    Re : Programmation batch....

    C'est fait.
    Ca ne change malheureusement rien..
    C'est dommage, on y était presque.

  20. #50
    bibi2223

    Re : Programmation batch....

    Serait-ce la syntaxe de "set /a diff = size1-size2" ?
    J'ai tenté en supprimant les espaces avant et après le = mais ça ne change rien...
    Dernière modification par bibi2223 ; 15/03/2023 à 20h02.

  21. #51
    umfred

    Re : Programmation batch....

    En faisant des tests supplémentaires, sur des dossiers plus gros que lors de mes tests, j'avais des erreurs de calculs de la différence. Donc, j'en suis arrivé à la conclusion que les valeurs étaient trop grosses pour être converties correctement en valeur.
    Ce qui se vérifie en saisissant l'opération directement dans l'invite de commande:
    Code:
    c:\>set /a t=3559838215-2060582111
    Nombre non valide. Les nombres sont limités à une précision de 32 bits
    Donc j'ai fait l'opération dans le script vbs en remplaçant !diff! par !size1!-!size2!
    Code:
    echo MsgBox "Taille source (C:) : " ^& FormatNumber(!formatted_size1!, 0, True) ^& " octets" ^& vbCrLf ^& "Taille cible (D:) :    " ^& FormatNumber(!formatted_size2!, 0, True) ^& " octets" ^& vbCrLf ^& "Différence: " ^& FormatNumber(!size1!-!size2!,0,True) ^& " octets", vbOKOnly, "Resultat du backup" > %temp%\temp.vbs
    Si tu as besoin de la valeur dans le batch, il faudra diviser les valeurs par 10, 100, 1000 dans des variables et faire les opérations mathématiques nécessaires
    https://stackoverflow.com/questions/...s-of-precision
    Ou de tout faire dans un script vbs directement (vu que tu utilises vbs ici pour la messagebox) (ou un autre langage)

  22. #52
    bibi2223

    Re : Programmation batch....

    Tu es un chef @umfred !!!
    Tout fonctionne parfaitement à présent, sans recourir à une conversion quelconque car la différence est très bien calculée.
    Alors un grand merci d'avoir eu la patience de te pencher sur ce petit batch qui va appuyer ma décision de faire ou non une sauvegarde.

    Ce même batch peut servir à quiconque cherche une formule rapide et facile (sans soft de backup) pour vérifier si une copie est ok..

    Génial et encore MERCI !
    Dernière modification par bibi2223 ; 16/03/2023 à 18h19.

  23. #53
    umfred

    Re : Programmation batch....

    Comme je le suggérais, un script uniquement en vbs peut aussi faire le job (avec peut-être moins de lignes)

    Code:
    dim fso, foldername1, foldername2, objfolder, size1, size2, diff
    foldername1="C:\temp"
    foldername2="P:\Projets"
    
    set fso=CreateObject("Scripting.FileSystemObject")
    if fso.FolderExists(foldername1) Then	size1=fso.Getfolder(foldername1).size
    if fso.FolderExists(foldername2) Then	size2=fso.Getfolder(foldername2).size
    diff=size1-size2
    MsgBox "Taille source (C:) : " & FormatNumber(size1, 0, True,,True) & " octets" & vbCrLf & "Taille cible (D:) :    " & FormatNumber(size2, 0, True,,True) & " octets" & vbCrLf & "Différence: " & FormatNumber(diff,0,True,,True) & " octets", vbOKOnly, "Resultat du backup"
    Le formatage de l'affichage (séparation des milliers) se faisant via un paramètre de FormatNumber (ce qui aurait aussi pu être fait dans le .bat)
    J'ai laissé le calcul en dehors de la messagebox pour montrer que ça fonctionne sans souci ici
    Dernière modification par Jack ; 16/03/2023 à 18h58. Motif: à la demande du rédacteur

  24. #54
    polo974

    Re : Programmation batch....

    Bon, t'as le bon nombre d'octets, comment tu es sûr que ce sont les bins au bon endroit?

    Question subsidiaire: quid des droits sur les fichiers?
    Jusqu'ici tout va bien...

  25. #55
    umfred

    Re : Programmation batch....

    dans se démarche, il a les droits sur les répertoires puisque qu'il veut en faire la sauvegarde (après on peut complexifier à l'envie si on veut)

  26. #56
    polo974

    Re : Programmation batch....

    ou utiliser un outil disponible (libre) qui fait le job (avec plein d'options additionnelles)...
    Jusqu'ici tout va bien...

  27. #57
    pm42

    Re : Programmation batch....

    Citation Envoyé par polo974 Voir le message
    ou utiliser un outil disponible (libre) qui fait le job (avec plein d'options additionnelles)...
    Tu es fou ? J'ai laissé entendre ça dès le début mais visiblement passer 10 jours et des page à utiliser un langage inadapté, une approche inadaptée, avec des specs en partie impossibles pour réinventer la roue mais carrée ou au mieux octogonale semble être l'approche préférée du forum informatique en ce moment.

  28. #58
    umfred

    Re : Programmation batch....

    @pm42 tu n'as pas vraiment proposé de solution alternative

    En logiciel qui tourne bien pour comparer des répertoires, j'utilise WinMerge https://winmerge.org/downloads/?lang=fr
    ça te compare les arborescences et t'indique les différences au niveau des fichiers

  29. #59
    pm42

    Re : Programmation batch....

    Citation Envoyé par umfred Voir le message
    @pm42 tu n'as pas vraiment proposé de solution alternative
    Non, quand les gens me prennent de haut et m'expliquent mon domaine d'expertise, je suis curieusement moins motivé.
    Il y a aussi le fait que parfois, je pense que c'est bien qu'ils fassent des recherche Google/Bing/DuckDuckGo pour découvrir que la roue existe au lieu d'essayer d'en tailler une en calcaire avec des silex.

  30. #60
    bibi2223

    Re : Programmation batch....

    @pm42
    Si tu n'as pas d'autre objectif que de critiquer en permanence les réponses des autres internautes sans chercher à aider la demande postée, je te suggère d'aller faire état de tes hautes connaissances dans d'autres discussions. Ton insistance ridicule sent la hargne puérile.
    Umfred ayant résolu ma demande, je le remercie à nouveau, quite ce fil, et te laisse déblatérer à sasiété si c'est ton seul plaisir.

Page 2 sur 3 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. Batch
    Par invite8d49186d dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 21/09/2020, 10h02
  2. [Biotechnologie] réacteurs batch et fed batch
    Par invite899441b9 dans le forum Biologie
    Réponses: 1
    Dernier message: 21/11/2010, 11h53
  3. [Biotechnologie] batch simple et batch soutiré
    Par invite31eac219 dans le forum Biologie
    Réponses: 0
    Dernier message: 06/11/2010, 12h32
  4. Virus a.bat batch
    Par invited536931b dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 10
    Dernier message: 31/01/2009, 19h40
  5. DOS et Batch
    Par SPH dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 25/02/2008, 05h44