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 :

Calcul de dates


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut Calcul de dates
    Bonjour,

    J'arrive à récupérer la date du jour. La convertir de JJ/MM/AAAA en MM/JJ/AAAA.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    echo Affichage de la date (JJ/MM/AAAA)
    echo %date:~0,2%/%date:~3,2%/%date:~-4%
    
    echo Affichage de la date (MM/JJ/AAAA)
    echo %date:~3,2%/%date:~0,2%/%date:~-4%
    
    Je déclare une variable nbremois qui correspond au nombre de mois à enlever à cette date.
    
    echo variable nombre de mois
    set nbremois=2
    echo Affichage de la date (MM/JJ/AAAA) - nombre de mois (variable nbremois)
    set /a daterecalculee=%date:~3,2%-%nbremois%
    echo %daterecalculee%
    erreur "Invalid number. Numeric constants are either decimal (17),
    hexadecimal (0x11), or octal (021).
    7"

    Normal ma variable nombre de mois est un string mais comment la convertir en integer (pour que mon calcul se fasse) ?

    Comment gérer si le mois est 09 par exemple au lieu de 10. il ne faudrait pas que la date soit sur un seul caractère.

    merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    En fait, tu es bien en mode numérique, mais quand il y a un 0 en première position dans le nombre, ce dernier est considéré comme une valeur octale, mais comme 08 et 09 n'existent pas dans cette base, tu as l'erreur que tu rencontres, c'est à dire un nombre non valide. Pour enlever le zéro initial et travailler en base décimale, tu peux faire une opération qui retourne les restes, code exemple :

    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
    @echo off
    set mois=08
    set nouveaumois=error
    echo.
    echo operation 1:
    echo.------------
    set /a nouveaumois=%mois%+1
    echo.
    echo %nouveaumois%
    echo.
    echo.
    echo operation 2:
    echo.------------
    set /a nouveaumois=(100%mois%%%100)+1
    echo.
    echo %nouveaumois%
    echo.
    echo.
    pause
    Note que le modulo en tant qu'opérateur est ici dédoublé pour qu'il soit interprété comme tel dans un script.

    P.-S. modération : C'est une question qui revient très souvent et apparemment elle n'est pas dans la faq, il faudrait la rajouter...

  3. #3
    Membre averti
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    Bonjour,

    Merci beaucoup !

    Comment gérer le plus proprement et simplement possible :
    dans une variable je récupère le mois. Il est récupéré sur un seul chiffre si inférieur à 10.

    Si la date (le mois) est entre 01 et 09, je récupèrerai entre 1 et 9. Il faudrait ajouter le 0. Si entre 10 et 12 aucun souci c'est sur 2 caractères.

    Merci

  4. #4
    Membre averti
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    Voici le code que j'ai utilisé ça semble OK

    J'ajoute un 0 devant et je ne conserve que les 2 derniers caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set daterecalculee=0%daterecalculee:~-2%

  5. #5
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    dans ton opération, tu peux ajouter 1000 (ou 100) et ne retenir que les deux derniers chiffres à l'affichage en guise de formatage, tu peux passer par une variable intermédiaire pour ne pas modifier la valeur de la variable initiale aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set /a nouveaumois=(100%mois%%%100)+1+1000
    echo.
    echo %nouveaumois:~-2%
    echo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set /a nouveaumois=(100%mois%%%100)+1
    set str_mois=00%nouveaumois%
    set str_mois=%str_mois:~-2%%
    echo.
    echo %str_mois%
    echo.

  6. #6
    Membre averti
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    C'est top

    Merci !

  7. #7
    Membre averti
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut Bug depuis ce mois ci
    Bonjour,

    J'exécute une fois par semaine le code ci-dessous dans un script depuis des mois et depuis le mois de décembre ça ne fonctionne plus.

    Ce script, fait des purges de log. On purge les fichiers plus vieux que 2 mois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    REM variable nombre de mois
    set nbremois=2
    echo Purge des logs de plus de 2 mois
    REM echo Affichage de la date (MM/JJ/AAAA) - 2 mois (var nbremois)
    set /a daterecalculee=(100%date:~3,2%%%100)-%nbremois%
    REM Pour les mois < 10, le 0 ne remonte pas
    REM Ajout d'un 0 devant et on ne conserve que les 2 derniers caractères
    set daterecalculee=0%daterecalculee:~-2%
    set daterecalculee=%daterecalculee%/%date:~0,2%/%date:~-4%
    REM echo Affichage de la date (JJ/MM/AAAA) - 2 mois (var nbremois)
    set daterecalculee=%daterecalculee:~3,2%/%daterecalculee:~0,2%/%daterecalculee:~-4%
    REM echo %daterecalculee%
    REM Affichage de la date - 2 mois (var nbremois)
    echo %daterecalculee%
    Voici ce que ça me retourne
    /0/01/2012

    Quelqu'un a-t-il une idée ?

    Merci d'avance pour votre aide.

  8. #8
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Bonjour,

    Test ton batch en faisant un echo de ta variable suivie d'un pause après chaque ligne et tu trouveras rapidement le problème.

    En fait, tu ferais mieux de traiter une valeur après l'autre dans ton code.
    Traite le jour, le mois et l'année separement et ensuite tu les réunies dans une
    variables. C'est beaucoup plus propres et plus simples à débugger.

    Si le mois et 01,02, tu dois au prealable l'incrementer de 12 pour avoir le résultat correct et parallelement soustraire 1 de l'année (parce que en Janvier et Fevrier 2013 tu va detruire les fichiers de 2012).
    Ainsi tu auras la date exact.

    Je ne sais pas d'où vient cette idée de mettre 100 devant et 100 derrère ????

    Je t'ai fait le code pour le mois a toi de faire l'annee. (attention pour XP la variable %date% a une autre valeur que pour vista ou 7. Ici le code est pour vista ou 7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set mois=%date:~3,2%
    :::: Si le mois est egal a 01 ou 02 on l'incremente de 12
    if %mois% leq 2 set /a mois=%mois:~1,1%+12
    :::: Pour les autres mois jusqu au mois 09
    if %mois% leq 9 set mois=%mois:~1,1%
    :::: On soustraie les 2 mois
    set /a mois=%mois%-2
    :::: Si le mois et plus petit ou égale à 9 on lui rajoute un 0 devant
    if %mois% leq 9 set mois=0%mois%
    echo Les fichiers du mois : %mois% seront detruit
    C'est pas plus jolie comme ça ?

    Si tu as encore des problèmes, réenvoi un message.
    amicalement

  9. #9
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Tu peux également t'interesser à la commande
    qui te permet de faire ça avec une ligne de commande.

    Voir ce sujet :

    http://www.developpez.net/forums/d12...ieux-10-jours/

    Mais essaye de terminer ton propre programme. C'est beaucoup plus gratifiant.

  10. #10
    Membre confirmé Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut
    Pour ma part je ferai comme ceci.

    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
    
    @echo off
    
    Rem Definition des Variables Jour / Mois / Annees
    Set JJ=%date:~0,2%
    Set MM=%date:~3,2%
    Set AAAA=%date:~6,4%
    Rem Cas Particulier Mois Janvier et Fevrier
    if %MM%==1 set MM=11
    if %MM%==2 set MM=12
    if %MM% LEQ 2 set /a AAAA=%AAAA%-1
    Rem Reste de l'Annee
    set /a MM=%MM%-2
    
    Rem Echo de la date d effacement
    echo Date=%MM%/%JJ%/%AAAA%
    Simple et efficace quelque soit la date.

  11. #11
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Simple et efficace, mais ne fonctionne pas !

    Síl te plaît test ton script avant de le poster.

    Tu set ton mois a 12 ou 11 si le mois actuel est 1 ou 2
    tu dois tester si le mois est 01 ou 02.

    ensuite tu enlève de toutes façon 2 mois donc ton mois 11 (juste) devient
    9 (faux)

    et pour finir tu oublie le test pour mettre un zero devant le mois si il est inférieur à 9.

    Amicalement

  12. #12
    Membre confirmé Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut
    Re,

    Effectivement,
    dans la précipitation, j'ai omis de faire mon test sur 01 et 02 au lieu de 1 et 2.

    En revanche lors de mes test de soustraction (sur ma machine au taf)j'ai eu en retour 09 et pas 9, ce qui me semble étrange.
    Sur ma machine perso j'ai refait le test et en effet le code me sort une erreur, puisque la valeur est à 9 et non pas 09.

    Merci de la correction.
    je simplifierai le script pour en poster un nouveau.

  13. #13
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Voilá le code au complet ! Revu et corrigé ! POUR WINDOWS 7 ET VISTA !!!
    pour xp il faut déplacer les valeur récuperer dans %date% de 4 vers la droite

    Il y avait également un bug dans mon précedent code.
    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
    ::: Par Sachadee
    ::: 15-01-2013
    @echo off
    color 1b
    cls
    setlocal
    
    set jour=%date:~0,2%
    set mois=%date:~3,2%
    set an=%date:~6,4%
    
    ::ON RETIRE LE 0 DEVANT LES MOIS (INDISPENSABLE POUR LES OPERATIONS MATHEMATIQUES)
    ::CAR 09 SERAIT TRAITER EN OCTAL PAR l'INTERPRETEUR
    
    for %%a in (01 02 03 04 05 06 07 08 09) do (if %mois%==%%a set mois=%mois:~1,1%)
    
    :::: Si le mois est egal a 1 ou 2 on l'incremente de 12 et on retire 1 á l'année
    
    if %mois% leq 2 (set /a mois=%mois%+12
                           set /a an=%an%-1)
    
    :::: On soustraie les 2 mois
    set /a mois=%mois%-2
    
    :::: Si le mois et plus petit ou égale à 9 on lui rajoute un 0 devant
    
    if %mois% leq 9 set mois=0%mois%
    
    :::ON AFFICHE LE RÉSULTAT
    echo.
    echo NOUS SOMMES LE  : %date%
    echo LES FICHIERS DU : %jour%/%mois%/%an% SERONT DETRUIT
    echo.
    
    :end
    endlocal
    pause
    Amicalement

  14. #14
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Quelques codes intéressants pour le traitement des dates :

    Une perle de JUDAGO. Un calendrier en batch. Il suffit d'entrer l'annee desirée.

    http://judago.webs.com/content/Scripts/calender.txt

    sur DOSTips.com :

    http://www.dostips.com/DtTipsDateTim...Batch.FileDate

Discussions similaires

  1. [Calendar]Problème de calcul de date
    Par valerie90 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 08/12/2004, 12h13
  2. COUNT + Calcul de DATE
    Par cassi2 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2004, 16h35
  3. Resutlat de calcul sur date formaté
    Par neness dans le forum SQL
    Réponses: 6
    Dernier message: 16/06/2004, 15h34
  4. SCRIPT CALCULANT LA DATE
    Par Redouane dans le forum ASP
    Réponses: 3
    Dernier message: 17/03/2004, 09h10
  5. Calcul sur date
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/09/2003, 08h55

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