Calcul sur les heures sous DOS

Bonjour,
Je cherche un peu partout des infos sur la création de fichier .bat, afin d'assurer la sauvegarde de mes archives sur le réseau
Ce fichier .bat est ensuite automatiquement lancé la nuit, via le gestionnaire de tâches ....
Bon je suis neu neu dans ce domaine, mais avec un peu de logique et d'astuces on arrive "presque" à ces fins.
Ceci dit je me heurte à un petit problème de calcul .... avant toutes choses voilà le code

@echo off
ECHO.
ECHO ************************************************
ECHO * *
ECHO * SAUVEGARDE ARCHIVES LOTUS VERS M: EN COURS *
ECHO * *
ECHO ************************************************
ECHO.
set debut=%TIME%
ECHO Debut de la sauvegarde a: %debut%
C:
cd Program Files
cd lotus
cd notes
cd data
cd archive
@xcopy *.* M:\Sauvegarde_Archives_LOTUS\ /Q /E /R /Y /I
ECHO.
ECHO ***********************************************
ECHO * *
ECHO * SAUVEGARDE ARCHIVES LOTUS SUR M: TERMINEE *
ECHO * *
ECHO ***********************************************
ECHO.
set fin=%TIME%
ECHO Fin de la sauvegarde a: %fin%
set /a duree=%fin%-%debut%
ECHO Duree de la sauvegarde : %duree%
pause


La pose finale me permet le matin en arrivant de contrôler que le script c'est bien lancé pendant la nuit

Donc voilà le problème
Au début je stocke l'heure de début dans la variable %début% et l'heure de fin dans la variable %fin%
Ensuite je veux faire la différence entre les deux en stockant le résultat dans la variable %duree% par la commande

set /a duree=%fin%-%debut%

.... mais ça marche pas

Pour info voila le résultat: http://cjoint.com/data/iktVpdHxZR_Resultat.jpg

1- Auriez-vous l'info qui me permette d'obtenir le résultat au format heure (ex: 01:02:53.26)
2- Question subsidiaire. Comment pendant la sauvegarde avoir une petite animation simple qui m'indique que la routine est en cours ?
Car, ne voulant pas afficher le nom des fichiers sauvegardés, on ne vois pas la routine tourner, seul le prompt clignote

Merci par avance
Configuration: Windows XP Internet Explorer 7.0

10 réponses

  1. Bonjour,
    Petit Up au cas ou
    A+
    0
    1. Contributeur
      hello
      ce bout de code va ouvrir une fenetre, afficher l'arborescence des dossiers de M:\Sauvegarde_Archives_LOTUS toute les 10 secs tant que le xcopy tourne

      del /q LOCK 2> NUL
      start cmd /c "for /l %a in (1,1,10000) do (@tree M:\Sauvegarde_Archives_LOTUS & @ping -n 10 127.0.0.1 > NUL & if exist LOCK exit /b)"
      @xcopy *.* M:\Sauvegarde_Archives_LOTUS\ /Q /E /R /Y /I
      echo. > LOCK
      0
      1. Salut dubcek
        Merci pour cette amélioration .... mais et oui il y a un "mais" ..... En dehors du gait que je n'y cmprend rien, ça marche pas ou j'ai pas su la mettre en applications

        J'ai écris
        REM -------- SAUVEGARDE ARCHIVES LOTUS ---------
        ECHO - SAUVEGARDE ARCHIVES LOTUS EN COURS -
        del /q LOCK 2> NUL
        start cmd /c "for /l %a in (1,1,10000) do (@tree M:\Sauvegarde_Archives_LOTUS & @ping -n 10 127.0.0.1 > NUL & if exist LOCK exit /b)"
        @xcopy C:\Program Files\lotus\notes\data\archive M:\Sauvegarde_Archives_LOTUS /Q /E /R /Y /I
        echo. > LOCK
        ECHO - SAUVEGARDE ARCHIVES LOTUS TERMINEE -


        J'ai le renvoi suivant
        - SAUVEGARDE ARCHIVES LOTUS EN COURS -
        Nombre de paramètres non valide
        - SAUVEGARDE ARCHIVES LOTUS TERMINEE -


        Merci
        0
        1. Contributeur
          j'ai testé interactivement, alors il manque un % pour %%a dans un .bat:
          start cmd /c "for /l %%a in (1,1,10000) do (@tree M:\Sauvegarde_Archives_LOTUS & @ping -n 10 127.0.0.1 > NUL & if exist LOCK exit /b)"
          0
          1. Re
            Effectivement ça marche .... mais j'ai toujurs rien compris. Appliquer sans savoir ça me dérange
            Faut je j'essaye de comprendre (ça peu être utile pour autre chose voir débuger au besoin)

            Question N°1:
            Un petit fichier (Lock) sans extention se créer sur le lieu ou se trouve mon batch ?? Pourquoi ??

            Question N°2
            Que viens faire la fonction ping là dedans ??

            [Edit] Oups, j'ai compris .... c'est une pause
            https://forums.commentcamarche.net/forum/affich-1264217-commande-ms-dos-pour-inserer-une-pause

            Merci bien
            0
            1. Contributeur
              tu as raison

              # on supprime le fichier lock (n'importe quel nom) en ignorant le message si il n'existe pas
              del /q LOCK 2> NUL

              # on démarre une boucle longue (10000) en exécutant tree
              start cmd /c "for /l %a in (1,1,10000) do (@tree M:\Sauvegarde_Archives_LOTUS

              # le ping sert juste à attendre 10s, c'est plus simple qu'une boucle
              @ping -n 10 127.0.0.1 > NUL

              # tant que le fichier lock n'existe pas, xcopy tourne toujours, donc on boucle
              if exist LOCK exit /b)"

              # xcopy terminant, on crée un fichier lock donc la boucle va terminer
              @xcopy .........
              echo. > LOCK
              0
              1. Re

                Ah !! en effet ça deviens plus clair ... mais j'avais un peu avancé.
                Je reste géné sur la synthaxe le %%a par exemple je sais pas à quoi il sert ....

                Merci pour ton aide
                A+
                0
                1. Contributeur
                  c'est une boucle, %%a prend la valeur 1, jusqu'a 10000, par pas de 1
                  for /l %a in (1,1,10000) do ...

                  essaye for /l %a in (1,1,10) do echo %a
                  avec %%a dans un .bat

                  j'aurais aussi pu faire une boucle infinie
                  :x
                  tree ...
                  goto x
                  0
                  1. Merci dubeck
                    je commence à saisir ... mais il faut que je pratique :o)
                    A+
                    0