IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Soustraction de date et time [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Soustraction de date et time
    Bonjour à tous,

    Besoin (encore) d'un peu d'aide pour faire une fcking soustraction!

    Je débute en batch et je maîtrise pas du tout l'élement "setlocal enabledelayedexpansion", voir je ne le comprends pas! Même après de nombreuses recherches!
    En gros, il faut remplacer les %variables% par !variables!, mais y'a pas que ça! Permet d'afficher les valeurs des variables si c'est du texte?
    Bref, je sature à essayer d'apprendre tout seul!

    Je vous fournis mon code simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    @echo off & cls
    setlocal enabledelayedexpansion
    title essai de soustraction de date!
    set datedebut=%date%
    set timedebut=%time%
    echo %datedebut%
    echo.
    echo %timedebut%
    timeout /t 10
    set datefin=%date%
    set timefin=%time%
    echo.
    echo Le programme a commence le %datedebut% a %timedebut%
    echo.
    echo Et il a finit le %datefin% a %timefin%
    set /a "timetotal=(!timefin!-!timedebut!)"
    echo.
    echo Il a donc duree : !timetotal!
    echo.
    echo Il a donc duree : %timefin-timedebut%
    pause >nul
    pause
    Ce code m'affiche à la ligne 16 >> Il manque une parenthèse.
    Donc je fais set /a "timetotal=((!timefin!)-(!timedebut!))" >> même erreur !
    J'enlève les "!" et mets des "%" mais toujours des erreurs!

    Je sature!

    Une explication claire S'IL VOUS PLAÎT !!!!

    Merci d'avance! =)

  2. #2
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    Salut,
    Il me semble qu'il faut convertir ton %time% en secondes, faire ta soustraction et ensuite seulement reformatter les secondes en XX:XX:XX

    EDIT:
    Ou tu peux split le format de ton %time% et faire la soustraction pour chaque numéros du style:
    timedebut = 21:25:10 timefin= 21:25:15
    21-21=0 25-25=0 15-10 = 5 et tu reformattes le tout en 00:00:05
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Pour ceux que ça intéressent, j'ai pondu ça!

    Le pire c'est que ça marche!

    Voici le code (environ 80 lignes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    @echo off & cls
    title essai de soustraction de date!
    mode con cols=80
    mode con lines=40
    
    set datedebut=%date%
    set timedebut=%time%
    set heuresdebut=%timedebut:~0,2%
    set minutesdebut=%timedebut:~3,2%
    set secondesdebut=%timedebut:~6,2%
    set centdebut=%timedebut:~9,2%
    set /A calctimedebut=(1%timedebut:~0,2%-100)*360000 + (1%timedebut:~3,2%-100)*6000 + (1%timedebut:~6,2%-100)*100 + (1%timedebut:~9,2%-100)
    
    echo VARIABLES DEBUT :
    echo.
    echo datedebut     = %datedebut% 
    echo timedebut     = %timedebut%
    echo heuresdebut   = %timedebut:~0,2% h
    echo minutesdebut  = %timedebut:~3,2% min
    echo secondesdebut = %timedebut:~6,2% sec
    echo centdebut     = %timedebut:~9,2% centisec
    echo calctimedebut = (%heuresdebut%*3600)+(%minutesdebut%*60)+(%secondesdebut%*100)+%centdebut% centisecondes
    echo               = %calctimedebut% centisecondes
    
    echo.
    set /p attente="Valeur de timeout : "
    timeout /t %attente%
    echo Vous venez d'attendre %attente% secondes
    
    set datefin=%date%
    set timefin=%time%
    set heuresfin=%timefin:~0,2%
    set minutesfin=%timefin:~3,2%
    set secondesfin=%timefin:~6,2%
    set centfin=%timefin:~9,2%
    set /A calctimefin=(1%timefin:~0,2%-100)*360000 + (1%timefin:~3,2%-100)*6000 + (1%timefin:~6,2%-100)*100 + (1%timefin:~9,2%-100)
    
    echo.
    echo VARIABLES FIN :
    echo.
    echo datefin     = %datefin%
    echo timefin     = %timefin%
    echo heuresfin   = %timefin:~0,2% h
    echo minutesfin  = %timefin:~3,2% min
    echo secondesfin = %timefin:~6,2% sec
    echo centfin     = %timefin:~9,2% centisec
    echo calctimefin = (%heuresfin%*3600)+(%minutesfin%*60)+(%secondesfin%*100)+%centfin% centisecondes
    echo             = %calctimefin% centisecondes
    
    echo.
    echo Le programme a commence le %datedebut% a %timedebut%
    echo Et ile a finit le %datefin% a %timefin%
    rem if %tempscentfin% LSS %tempscentdebut% set /a "duree=(%tempscentdebut-tempscentfin%)" else set /a "duree=(%tempscentfin%-%tempscentdebut%)"
    set /a "duree=(%calctimefin%-%calctimedebut%)"
    
    rem centisecondes vers heures minutes secondes centisecondes
    set /A "dureeheur=%duree% / 360000"
    set /A "dureemin=(%duree% - %dureeheur%*360000) / 6000"
    set /A "dureesec=(%duree% - %dureeheur%*360000 - %dureemin%*6000) / 100"
    set /A "dureecent=(%duree% - %dureeheur%*360000 - %dureemin%*6000 - %dureesec%*100)"
    set /A "dureesecondes=(%duree%/100)"
    
    rem reformatage si < 10
    if %dureeheur% LSS 10 set dureeheur=0%dureeheur%
    if %dureemin% LSS 10 set dureemin=0%dureemin%
    if %dureesec% LSS 10 set dureesec=0%dureesec%
    if %dureecent% LSS 10 set dureecent=0%dureecent%
    
    
    echo Elle a donc duree : %duree% centisecondes
    echo Soit              : %dureesecondes% secondes
    echo Soit              : %dureeheur% heures %dureemin% minutes %dureesec% secondes %dureecent% centisecondes
    
    pause > nul
    pause
    echo				/!\ Ceci est la derniere pause /!\
    pause > nul
    pause
    Voilà j'espère que ça vous parait correct!
    J'ai choppé une partie du code sur un autre site, et je l'ai adapté! Le plus dur a pondre c'est le "set /a calctimedebut" et "set /a calctimefin", le reste est assez intuitif!
    Enjoy! =)

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo