Dates excédentaires

Résolu
Henreck Messages postés 10 Statut Membre -  
 Elwood -
J'essaie de faire un programme capable de créer une arborescence de dossier avec les dates.
Le problème est qu'il ne prend pas en compte le fait que certain mois ont un certain nombre de jours. Donc si je l'exécutes le 28 Février il créera 7 fichiers nommé jusqu'au 34 Février. Comment faire en sorte qu'il iras automatiquement sur l'autre début de mois ?
Merci de votre aides !

Code source :
https://pastebin.com/EEHTt73r

2 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    Voilà une solution qui prend en compte le nombre de jours de chaque mois :

    :: Ce fichier a pour but de simplifier la création
    :: d'une arborescence de dossier pour les feuilles
    :: de caisses.
    ::
    :: Originalement conçue par ??????????????, 744.

    @Echo off
    Title Version 1.0 ^| 04-03-2019
    setlocal enableextensions enabledelayedexpansion
    chcp 1252 >nul

    SET mois=%date:~3,2%
    SET jour=%date:~0,2%

    SET mois1=Janvier#31
    SET mois2=Février#29
    SET mois3=Mars#31
    SET mois4=Avril#30
    SET mois5=Mai#31
    SET mois6=Juin#30
    SET mois7=Juillet#31
    SET mois8=Août#31
    SET mois9=Septembre#30
    SET mois10=Octobre#31
    SET mois11=Novembre#30
    SET mois12=Décembre#31

    for /L %%A in (1,1,12) do set limite%%A=!mois%%A:~-2!

    set dossier=Semaine du %jour%-%mois%
    if not exist "%dossier%" (MKDIR "%dossier%")
    CD %dossier%

    if %mois% LSS 10 (set mois=%mois:~1,1%)
    set max=!limite%mois%!

    for /L %%E in (1,1,7) do (

    set /a jour+=1
    if !jour! GTR !max! (
    set /a jour-=!max!
    set /a mois+=1
    )
    COPY "..\Vierge.xls" "Feuille de Caisses du !jour!-!mois!.xls"

    )

    echo. & pause
    exit /b 0


    Je n'ai pas encore cherché pour les années bissextiles, je regarderai ça demain soir.

    1
    1. Henreck Messages postés 10 Statut Membre
       
      pour les années bissextile, j'y suis arriver en intégrant ça :

      Set /A "bissextile=!(annee%%4) + (!!(annee%%100)-!!(annee%%400))"

      IF %mois% EQU Fevrier (
      IF %bissextile% EQU 1 (
      IF %jour% GTR 29 (
      SET mois=Mars
      SET jour=1 ))
      IF %bissextile% NEQ 1 (
      IF %jour% GTR 28 (
      SET mois=Mars
      SET jour=1 )))
      0
  2. Henreck Messages postés 10 Statut Membre
     
    J'ai réussis à la faire pour tout les mois de l’année à l'exception fait de Février car son nombre de jours varie selon 2 conditions:
    - Si l'année est divisible par 4 et non divisible par 100, ou
    - Si l'année est divisible par 400.

    J'ai essayer avec
    SET /A bissextile=2019/4

    Alors que le console me renvoie 504... normalement, c'est 504,75. Du coup je sais pas comment faire pour que la console comptent après la virgule

    Code source :
    https://pastebin.com/uRx7ASSQ
    0
    1. Elwood
       
      Tu n'as pas besoin de calculer la partie décimale. Tu as juste besoin de savoir s'il y en a une.
      Si tu re-multiplies et tu compares le contenu, tu sauras s'il y a une partie décimale.

      set /A bissextile=2019/4
      set /A mult=%bissextile% * 4
      if %bissextile% NEQ %mult% echo non divisible par 4
      0