Dates excédentaires

Résolu/Fermé
Henreck Messages postés 9 Date d'inscription lundi 4 mars 2019 Statut Membre Dernière intervention 16 mars 2019 - 4 mars 2019 à 20:47
 Elwood - 6 mars 2019 à 16:06
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

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 6 mars 2019 à 00:18
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
Henreck Messages postés 9 Date d'inscription lundi 4 mars 2019 Statut Membre Dernière intervention 16 mars 2019
6 mars 2019 à 15:04
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
Henreck Messages postés 9 Date d'inscription lundi 4 mars 2019 Statut Membre Dernière intervention 16 mars 2019
5 mars 2019 à 23:36
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
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