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 :

Afficher les années du jour identique [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 126
    Points : 76
    Points
    76
    Par défaut Afficher les années du jour identique
    Bonjour les développeurs.

    Comment afficher les années où le 17 juillet est tombé par un samedi

    Je m'explique par des exemples

    Je choisis une plage d'années comprise entre 1900 et 2021

    Je tape le début d'une année: 1900
    Je tape la fin d'une année: 2021
    Je tape le jour: 17
    Je tape le mois: 7
    Je tape l'année: 2021

    Le batch affiche le résultat suivant:


    samedi 17 juillet 1909
    samedi 17 juillet 1915
    samedi 17 juillet 1920
    samedi 17 juillet 1926
    samedi 17 juillet 1937
    samedi 17 juillet 1943
    samedi 17 juillet 1948
    samedi 17 juillet 1954
    samedi 17 juillet 1965
    samedi 17 juillet 1971
    samedi 17 juillet 1976
    samedi 17 juillet 1982
    samedi 17 juillet 1993
    samedi 17 juillet 1999
    samedi 17 juillet 2004
    samedi 17 juillet 2010
    samedi 17 juillet 2021

    Cela m'aide aussi à afficher les calendriers identiques

    Entrer l'année de début: 1990
    Entrer l'année de fin: 2021
    Entrer le jour: 1
    Entrer le mois: 1
    Entrer l'année: 1990

    Le batch affiche les calendriers identiques où le 1er janvier était un lundi

    lundi 1 janvier 1990
    lundi 1 janvier 1996 (année bissextile car 1 jour de plus)
    lundi 1 janvier 2001
    lundi 1 janvier 2007
    lundi 1 janvier 2018

    Les calendriers identiques en jours sont: 1990 - 2001 - 2007 - 2018

    Et aussi les années où le jour de naissance est tombé par un dimanche

    Voilà et merci de bien vouloir m'aider.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Salut,

    Pour pouvoir faire de telles requêtes, il faudrait une base de données, vu qu'il s'agit de batch on va se contenter de fichiers texte.

    Voilà un script qui crée un calendrier (un fichier texte par année, de 1900 à 2021) :

    Code batch : 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
    @echo off
    setlocal EnableExtensions EnableDelayedExpansion
     
    if not exist "%TMP%\Calendrier" (mkdir "%TMP%\Calendrier")
    del /q "%TMP%\Calendrier\*.txt"
     
    rem le premier jour de l'annee 1900 est un lundi
    set "jour=lundi"
     
    for /L %%A in (1900,1,2021) do (
     
    	cls & set "annee=%%A"
    	set "nbJours=28"
     
    	for /L %%E in (1804,4,2096) do if !annee! NEQ 1900 (if !annee! EQU %%E (set "nbJours=29"))
     
    	call :fonction janvier 31
    	call :fonction fevrier !nbJours!
    	call :fonction mars 31
    	call :fonction avril 30
    	call :fonction mai 31
    	call :fonction juin 30
    	call :fonction juillet 31
    	call :fonction aout 31
    	call :fonction septembre 30
    	call :fonction octobre 31
    	call :fonction novembre 30
    	call :fonction decembre 31
     
    )
     
    exit
     
    :fonction
     
    echo. & echo %1 !annee!
     
    for /L %%A in (1,1,%2) do (
     
    	set marqueur=0
    	echo !jour! %%A %1 !annee! >> %TMP%\Calendrier\!annee!.txt
     
    	if !jour!==dimanche (set "jour=lundi" & set marqueur=1)
    	if !jour!==samedi (set jour=dimanche)
    	if !jour!==vendredi (set jour=samedi)
    	if !jour!==jeudi (set jour=vendredi)
    	if !jour!==mercredi (set jour=jeudi)
    	if !jour!==mardi (set jour=mercredi)
    	if !jour!==lundi (if !marqueur! EQU 0 (set jour=mardi))
     
    )
     
    goto :eof

    Maintenant que la moitié du travail est faite, il ne te reste plus qu'à créer des requêtes batch, suivant ce que tu recherches.

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Passe à PowerShell si possible pour les gestions des dates c'est infiniment plus puissant.
    Si tu accepte on pourra regarder

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 126
    Points : 76
    Points
    76
    Par défaut Calendrier perpétuel traduit en français
    Bonsoir mes chers développeurs.

    Merci pour vos réponses. Je pensais que cela était plus simple vu que l'ordinateur gère les dates (jour/mois/année)

    Voici un script qui affiche un calendrier suivant l'année choisie:

    Je m'en sers assez souvent selon ce que je veux savoir. Je m'intéresse beaucoup aux calendriers des différentes civilisations.

    Savez-vous qu'en 1582, on est passé du jeudi 4 octobre (calendrier julien) au vendredi 15 octobre (calendrier grégorien) ?

    Réf. https://fr.wikipedia.org/wiki/Passag...gr%C3%A9gorien


    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    @ECHO OFF
    
    :: Xp batch for generating calendars
    :: Chances look good for win 2000 and above(untested)
    :: By Judago, August 2009
    
    IF "%~1"=="/?" (
        ECHO START "%~NX0" WITHOUT ARGUMENTS AND THEN ENTER THE YEAR.
        ECHO "%~NX0" WILL OPEN IN IT'S OWN WINDOW TO AVOID RESIZING
        ECHO AN EXISTING WINDOW.
        ECHO.
        ECHO A SCREEN RESOLUTION AND/OR FONT SIZE THAT CAN DISPLAY
        ECHO CMD WINDOWS OF 96 COLUMNS AND 39 LINES IS REQUIRED.
        ECHO SOME CONFIGURATIONS MAY USE SCROLL BARS TO ACHIEVE
        ECHO THIS.
        EXIT /B
    )
    
    :: The current codepage is stored in variable %CodePage%,
    :: then changed to 850 to facilitate box drawing characters.....
    
    FOR /F "tokens=*" %%A IN ('CHCP') DO FOR %%B IN (%%~A) DO SET CodePage=%%B
    CHCP 850 >NUL 2>&1
    
    :: The title can be used to falicitate custom window
    :: positioning via the properties menu of "calendars..."
    :: /max is used so as much content as possible is visable
    :: without moving the window. /max must be removed for
    :: custom window positing.....
    
    IF NOT "%~1 %~2"=="WINDOW SIZE" (
    	START "CALENDRIERS..." /MAX CMD /C "%~F0" WINDOW SIZE
    
    	REM Restore the original codepage before exiting.....
    
    	CHCP %CodePage% >NUL 2>&1
    	EXIT /B
    )
    MODE CON:COLS=96 LINES=39
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    :loop
    FOR %%Z IN (jan feb mar apr may jun jul aug sep oct nov dec year day leap noleap length test) DO SET %%Z=
    SET /P year=Entrez l'ann‚e pour afficher le calendrier, ou rien pour quitter, puis pressez entr‚e:
    IF NOT DEFINED year (
    
    	REM Restore the original codepage before exiting.....
    
    	CHCP %CodePage% >NUL 2>&1
    	EXIT /B
    )
    
    ::Test that the input is only numbers...
    
    SET test=!year!
    FOR /l %%Z IN (0 1 9) DO IF DEFINED test SET "test=!test:%%Z=!"
    IF DEFINED test CLS&GOTO loop
    :zero
    IF NOT DEFINED year (
    	:error
    	cls
    	echo L'ann‚e entr‚e n'est pas accept‚e.
    	echo.
    	pause
    	CLS
    	GOTO loop
    )
    
    :: remove leading zeros, if any...
    
    IF "%year:~0,1%"=="0" SET year=%year:~1%&&GOTO zero
    
    :: The %processor_architecture% test is used to test
    :: limits of caculations, if the variable is undefined
    :: or unrecognised the test will fall through and complete
    :: anyway, if the limit is surpassed this way the results may
    :: not be valid. The tested number is ~80% of the limit of the
    :: os so that year + year / 4 yields a valid result.
    
    IF /I "!processor_architecture!"=="x86" (
    	IF !year! gtr 1717986917 GOTO :error
    ) else (
    	IF NOT "!processor_architecture:64=!"=="!processor_architecture!" (
    		IF !year! gtr 7378697629483820645 GOTO :error
    	)
    )
    
    :: Generate the first day of the year, 0=sun, 1=mon,...,6=sat
    :: A 365 day year ofsets by one day, so the next year will start
    :: the next day (i.e. 2009 starts on thr and 2010 starts on fri)
    :: an extra day must be added for every leapyear. Using modulo
    :: 7 on the total of offset days reviels the starting day of the
    :: year. one day must also be removed if the year is a leap year
    :: because the below will add one for it, the remainder for non
    :: leap years is not an issue because set /a only returns whole
    :: numbers.
    
    SET /A day=(year + year / 4) - (year / 100 - year / 400)
    SET /A leap=year %% 400
    SET /A noleap=year %% 100
    IF !leap! GTR 0 (
    	IF !noleap! NEQ 0 SET /A leap=year %% 4
    )
    IF %leap%==0 SET /A day-=1
    SET /A day%%=7
    
    :: For each year every month is padded to is starting offset
    :: with spaces, january has the original offset generated above.
    :: each additional offset is generated by adding the total days of
    :: the previous month then processing it by modulo 7.
    :: The days are stored in a varianle to display later, these variables
    :: are padded to 111 characters using spaces for display purposes.
    
    FOR %%U IN (jan feb mar apr may jun jul aug sep oct nov dec) DO (
    	FOR %%V IN (jan mar may jul aug oct dec) DO IF /I %%U==%%V SET length=31
    	FOR %%W IN (apr jun sep nov) DO IF /I %%U==%%W SET length=30
    	IF /I %%U==feb (
    		IF !leap!==0 (
    			SET length=29
    		) else (
    			SET length=28
    		)
    	)
    	FOR /l %%X IN (1 1 !day!) DO SET "%%U=!%%U!   "
    	FOR /l %%Y IN (1 1 !length!) DO (
    		IF %%Y lss 10 (
    			SET "%%U=!%%U!%%Y  "
    		) else (
    			SET "%%U=!%%U!%%Y "
    		)
    	)
    	FOR /l %%Z IN (!length! 1 54) DO IF "!%%U:~110!"=="" SET "%%U=!%%U! "
    	SET /A day=^(day + length^) %% 7
    )
    :test
    
    :: The results are displayed below using substrings of each month's
    variable.
    
    cls
    TITLE CALENDRIER DE L'ANNE %YEAR%
    echo. ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo. º      JANVIER       º  º      FEVRIER       º  º        MARS        º  º       AVRIL        º
    echo. ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
    echo. ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº
    echo. ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
    echo. º%JAN:~0,20%º  º%FEB:~0,20%º  º%MAR:~0,20%º  º%APR:~0,20%º
    echo. º%JAN:~21,20%º  º%FEB:~21,20%º  º%MAR:~21,20%º  º%APR:~21,20%º
    echo. º%JAN:~42,20%º  º%FEB:~42,20%º  º%MAR:~42,20%º  º%APR:~42,20%º
    echo. º%JAN:~63,20%º  º%FEB:~63,20%º  º%MAR:~63,20%º  º%APR:~63,20%º
    echo. º%JAN:~84,20%º  º%FEB:~84,20%º  º%MAR:~84,20%º  º%APR:~84,20%º
    echo. º%JAN:~105%              º  º%FEB:~105%              º  º%MAR:~105%              º  º%APR:~105%              º
    echo. ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo. ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo. º        MAI         º  º        JUIN        º  º       JUILLET      º  º        AOUT        º
    echo. ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
    echo. ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº
    echo. ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
    echo. º%MAY:~0,20%º  º%JUN:~0,20%º  º%JUL:~0,20%º  º%AUG:~0,20%º
    echo. º%MAY:~21,20%º  º%JUN:~21,20%º  º%JUL:~21,20%º  º%AUG:~21,20%º
    echo. º%MAY:~42,20%º  º%JUN:~42,20%º  º%JUL:~42,20%º  º%AUG:~42,20%º
    echo. º%MAY:~63,20%º  º%JUN:~63,20%º  º%JUL:~63,20%º  º%AUG:~63,20%º
    echo. º%MAY:~84,20%º  º%JUN:~84,20%º  º%JUL:~84,20%º  º%AUG:~84,20%º
    echo. º%MAY:~105%              º  º%JUN:~105%              º  º%JUL:~105%              º  º%AUG:~105%              º
    echo. ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo. ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo. º     SEPTEMBRE      º  º      OCTOBRE       º  º      NOVEMBRE      º  º      DECEMBRE      º
    echo. ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
    echo. ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº  ºDi Lu Ma Me Je Ve Saº
    echo. ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹  ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
    echo. º%SEP:~0,20%º  º%OCT:~0,20%º  º%NOV:~0,20%º  º%DEC:~0,20%º
    echo. º%SEP:~21,20%º  º%OCT:~21,20%º  º%NOV:~21,20%º  º%DEC:~21,20%º
    echo. º%SEP:~42,20%º  º%OCT:~42,20%º  º%NOV:~42,20%º  º%DEC:~42,20%º
    echo. º%SEP:~63,20%º  º%OCT:~63,20%º  º%NOV:~63,20%º  º%DEC:~63,20%º
    echo. º%SEP:~84,20%º  º%OCT:~84,20%º  º%NOV:~84,20%º  º%DEC:~84,20%º
    echo. º%SEP:~105%              º  º%OCT:~105%              º  º%NOV:~105%              º  º%DEC:~105%              º
    echo. ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    GOTO loop
    ::https://www.robvanderwoude.com/3rdpartybatchfiles.php
    ::https://www.robvanderwoude.com/3rdpartybatchfiles.php#Calendar

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Non j’avoue que je ne savais pas

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Je n'étais pas au courant non plus.

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 126
    Points : 76
    Points
    76
    Par défaut
    Voici donc la version définitive du script de barnabe0057. MILLE MERCIS.

    Code Batch : 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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    @echo off
    setlocal EnableExtensions EnableDelayedExpansion
     
    : -------------------------------------------------------------------------------------------------------------------------
    : on définit les variables
    : -------------------------------------------------------------------------------------------------------------------------
     
    set "cal=%~dp0Calendrier"
     
    : -------------------------------------------------------------------------------------------------------------------------
    : on crée si besoin le dossier Calendrier ainsi que les fichiers .txt
    : -------------------------------------------------------------------------------------------------------------------------
     
    if not exist "%cal%" (mkdir "%cal%")
    if not exist "%cal%\*.txt" (call :creation)
     
    : -------------------------------------------------------------------------------------------------------------------------
    : on saisit les données nécessaires
    : -------------------------------------------------------------------------------------------------------------------------
     
    :debut
     
    set "cible="
    echo. & set /p cible="jour (en lettres) : "
    if not defined cible (goto :debut)
     
    set "jour="
    echo. & set /p jour="jour (en nombre) : "
    if not defined jour (goto :debut)
     
    set "mois="
    echo. & set /p mois="mois (en lettres) : "
    if not defined mois (goto :debut)
     
    set "anneeDebut="
    echo. & set /p anneeDebut="annee de debut : "
    if not defined anneeDebut (goto :debut)
     
    set "anneeFin="
    echo. & set /p anneeFin="annee de fin : "
    if not defined anneeFin (goto :debut)
     
    echo. & echo #####################################################################
    echo.
     
    : -------------------------------------------------------------------------------------------------------------------------
    : on recherche les correspondances dans la base de données
    : -------------------------------------------------------------------------------------------------------------------------
     
    for /L %%A in (%anneeDebut%,1,%anneeFin%) do findstr /I /C:"%cible% %jour% %mois%" "%cal%\%%A.txt"
     
    echo. & pause
    exit
     
    : -------------------------------------------------------------------------------------------------------------------------
    : on crée les fichiers constituants la base de données
    : -------------------------------------------------------------------------------------------------------------------------
     
    :creation
     
    rem le premier jour de l'annee 1900 est un lundi
    set "jour=lundi"
     
    for /L %%A in (1900,1,2050) do (
     
    cls & set "annee=%%A"
    set "nbJours=28"
     
    rem nb de jours en février concernant les années bissextiles
    for /L %%E in (1804,4,2096) do if !annee! NEQ 1900 (if !annee! EQU %%E (set "nbJours=29"))
     
    (call :fonction janvier 31
    call :fonction fevrier !nbJours!
    call :fonction mars 31
    call :fonction avril 30
    call :fonction mai 31
    call :fonction juin 30
    call :fonction juillet 31
    call :fonction aout 31
    call :fonction septembre 30
    call :fonction octobre 31
    call :fonction novembre 30
    call :fonction decembre 31) > "%cal%\!annee!.txt"
     
    )
     
    goto :eof
     
    :fonction
     
    (echo. & echo %1 !annee!) >CON
     
    for /L %%A in (1,1,%2) do (
     
    set marqueur=0
    echo !jour! %%A %1 !annee!
     
    if !jour!==dimanche (set "jour=lundi" & set marqueur=1)
    if !jour!==samedi (set jour=dimanche)
    if !jour!==vendredi (set jour=samedi)
    if !jour!==jeudi (set jour=vendredi)
    if !jour!==mercredi (set jour=jeudi)
    if !jour!==mardi (set jour=mercredi)
    if !jour!==lundi (if !marqueur! EQU 0 (set jour=mardi))
     
    )
     
    goto :eof

    https://batch.xoo.it/t6496-Afficher-...-identique.htm

  8. #8
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 48
    Points
    48
    Par défaut
    Bonjour, je viens de batch.xoo.it

    Je me permet de poster une version beaucoup plus compact (100% Batch), j'utilise la Conway's Doomsday Rule
    Plus d'info ici : https://en.wikipedia.org/wiki/Doomsday_rule

    Voilà le code en question :
    Code Batch : 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
    @echo off
    setlocal enabledelayedexpansion
     
     
     
    set name_must_be=Vendredi
     
     
    set /p day=Tapez le jour (exemple: 23) :
    set /p month=Tapez le mois (exemple: 7) :
     
    set /p yearstart=Tapez l'annee de debut (example: 1974) :
    set /p yearend=Tapez l'annee de fin (example: 2021) :
     
    echo;
     
    for /l %%i in (!yearstart!,1,!yearend!) do (
        set year=%%i
        call :GetDay !year! !month! !day! name
        if /i "!name!"=="!name_must_be!" echo;!name_must_be! !day! !month! !year!
    )
     
     
    pause>nul&exit
    rem Conway's Doomsday Rule
    :GetDay <Year> <Month> <Day> <Out:Name>
        set _year=%~1
        set _month=%~2
        set _day=%~3
        set _i=0
        for %%a in (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4) do (
            set _months[!_i!]=%%~a
            set /a _i+=1
        )
        if !_month! lss 3 (
            set /a _year-=1
        )
        set /a _monthindex=!_month!-1
        for %%a in (!_monthindex!) do set /a _nb=(!_year! + !_year!/4 - !_year!/100 + !_year!/400 + !_months[%%~a]! + !_day!) %% 7
        if !_nb! equ 0 set %~4=Dimanche
        if !_nb! equ 1 set %~4=Lundi
        if !_nb! equ 2 set %~4=Mardi
        if !_nb! equ 3 set %~4=Mercredi
        if !_nb! equ 4 set %~4=Jeudi
        if !_nb! equ 5 set %~4=Vendredi
        if !_nb! equ 6 set %~4=Samedi
    exit /b 0

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 126
    Points : 76
    Points
    76
    Par défaut
    Bonjour Flammrock.

    Merci pour ce script qui est fort intéressant car il affiche les années antérieures à 1900.

    Tapez le jour:1
    Tapez le mois:1
    Tapez l'annee de debut:1733
    Tapez l'annee de fin:1874

    Vendredi 1 1 1734
    Vendredi 1 1 1740
    Vendredi 1 1 1745
    Vendredi 1 1 1751
    Vendredi 1 1 1762
    Vendredi 1 1 1768
    Vendredi 1 1 1773
    Vendredi 1 1 1779
    Vendredi 1 1 1790
    Vendredi 1 1 1796
    Vendredi 1 1 1802
    Vendredi 1 1 1808
    Vendredi 1 1 1813
    Vendredi 1 1 1819
    Vendredi 1 1 1830
    Vendredi 1 1 1836
    Vendredi 1 1 1841
    Vendredi 1 1 1847
    Vendredi 1 1 1858
    Vendredi 1 1 1864
    Vendredi 1 1 1869

    Cependant, j'ai constaté des erreurs

    J'ai pris pour exemple la date de naissance de Michèle Morgan

    Réf. https://fr.wikipedia.org/wiki/Mich%C3%A8le_Morgan

    Elle est née le 29 février 1920 qui est une année bissextile
    Elle est décédée le 20 décembre 2016 qui est aussi une année bissextile

    J'ai voulu savoir le jour de sa naissance qui était un dimanche

    Mais le script a affiché ce qui suit:

    Tapez le jour:29
    Tapez le mois:2
    Tapez l'annee de debut:1920
    Tapez l'annee de fin:2016

    Vendredi 29 2 1924
    Vendredi 29 2 1929 (Jeudi 28 février 1929 - Vendredi 01 mars 1929)
    Vendredi 29 2 1935 (Jeudi 28 février 1935 - Vendredi 01 mars 1935)
    Vendredi 29 2 1946 (Jeudi 28 février 1946 - Vendredi 01 mars 1946)
    Vendredi 29 2 1952
    Vendredi 29 2 1957 (Jeudi 28 février 1957 - Vendredi 01 mars 1957)
    Vendredi 29 2 1963 (Jeudi 28 février 1963 - Vendredi 01 mars 1963)
    Vendredi 29 2 1974 (Jeudi 28 février 1974 - Vendredi 01 mars 1974)
    Vendredi 29 2 1980
    Vendredi 29 2 1985 (Jeudi 28 février 1985 - Vendredi 01 mars 1985)
    Vendredi 29 2 1991 (Jeudi 28 février 1991 - Vendredi 01 mars 1991)
    Vendredi 29 2 2002 (Jeudi 28 février 2002 - Vendredi 01 mars 2002)
    Vendredi 29 2 2008
    Vendredi 29 2 2013 (Jeudi 28 février 2013 - Vendredi 01 mars 2013)


    Alors que les dates qui correspondent au dimanche 29 février sont:

    dimanche 29 février 1920
    dimanche 29 février 1948
    dimanche 29 février 1976
    dimanche 29 février 2004

    Le script se base que sur le vendredi (ligne 6)

    set name_must_be=Vendredi

    Donc j'ai modifié la ligne 6

    set /p cible=Tapez le jour ( exemple: dimanche ) :
    set name_must_be=%cible%



    To be continued...

  10. #10
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 48
    Points
    48
    Par défaut
    Concernant ceci :
    Tapez le jour:29
    Tapez le mois:2
    Tapez l'annee de debut:1920
    Tapez l'annee de fin:2016

    Vendredi 29 2 1924
    Vendredi 29 2 1929 (Jeudi 28 février 1929 - Vendredi 01 mars 1929)
    Vendredi 29 2 1935 (Jeudi 28 février 1935 - Vendredi 01 mars 1935)
    Vendredi 29 2 1946 (Jeudi 28 février 1946 - Vendredi 01 mars 1946)
    Vendredi 29 2 1952
    Vendredi 29 2 1957 (Jeudi 28 février 1957 - Vendredi 01 mars 1957)
    Vendredi 29 2 1963 (Jeudi 28 février 1963 - Vendredi 01 mars 1963)
    Vendredi 29 2 1974 (Jeudi 28 février 1974 - Vendredi 01 mars 1974)
    Vendredi 29 2 1980
    Vendredi 29 2 1985 (Jeudi 28 février 1985 - Vendredi 01 mars 1985)
    Vendredi 29 2 1991 (Jeudi 28 février 1991 - Vendredi 01 mars 1991)
    Vendredi 29 2 2002 (Jeudi 28 février 2002 - Vendredi 01 mars 2002)
    Vendredi 29 2 2008
    Vendredi 29 2 2013 (Jeudi 28 février 2013 - Vendredi 01 mars 2013)
    Ce n'est pas totalement faux dans le sens où s'il y avait un hypothétique "29 février 1929", ce serait bien un "Vendredi" mais la date n'existe pas (bien que le jour soit valide théoriquement parlant)

    Si je fais l'inverse de ce que tu as fait, c'est-à-dire en prenant le 1 Mars, j'obtiens un résultat valide :
    Tapez le jour (exemple: 23) :1
    Tapez le mois (exemple: 7) :3
    Tapez l'annee de debut (example: 1974) :1920
    Tapez l'annee de fin (example: 2021) :2016

    Vendredi 1 3 1929
    Vendredi 1 3 1935
    Vendredi 1 3 1940
    Vendredi 1 3 1946
    Vendredi 1 3 1957
    Vendredi 1 3 1963
    Vendredi 1 3 1968
    Vendredi 1 3 1974
    Vendredi 1 3 1985
    Vendredi 1 3 1991
    Vendredi 1 3 1996
    Vendredi 1 3 2002
    Vendredi 1 3 2013
    Le script est correcte, c'est juste qu'il ne vérifie pas si les dates sont correctes, par exemple je peux faire ceci :
    Tapez le jour (exemple: 23) :30
    Tapez le mois (exemple: 7) :2
    Tapez l'annee de debut (example: 1974) :1920
    Tapez l'annee de fin (example: 2021) :2016

    Samedi 30 2 1924
    Samedi 30 2 1929
    Samedi 30 2 1935
    Samedi 30 2 1946
    Samedi 30 2 1952
    Samedi 30 2 1957
    Samedi 30 2 1963
    Samedi 30 2 1974
    Samedi 30 2 1980
    Samedi 30 2 1985
    Samedi 30 2 1991
    Samedi 30 2 2002
    Samedi 30 2 2008
    Samedi 30 2 2013
    La date n'existe pas, mais le jour "Samedi" est correcte. Il suffit donc de vérifier les dates, donc voici le script corrigé :
    (merci pour ta rigueur, j'ai encore du progrès à faire sur ce point)
    Code batch : 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
    79
    80
    81
    82
    83
    @echo off
    setlocal enabledelayedexpansion
     
     
    set /p cible=Tapez le jour ( exemple: dimanche ) :
    set name_must_be=%cible%
     
     
    set /p day=Tapez le jour (exemple: 23) :
    set /p month=Tapez le mois (exemple: 7) :
     
    set /p yearstart=Tapez l'annee de debut (example: 1974) :
    set /p yearend=Tapez l'annee de fin (example: 2021) :
     
    echo;
     
    for /l %%i in (!yearstart!,1,!yearend!) do (
        set year=%%i
        call :GetDay !year! !month! !day! name
        call :IsExistDate !year! !month! !day! && (
            if /i "!name!"=="!name_must_be!" echo;!name_must_be! !day! !month! !year!
        )
    )
     
     
    pause>nul&exit
    rem Conway's Doomsday Rule
    :GetDay <Year> <Month> <Day> <Out:Name>
        set _year=%~1
        set _month=%~2
        set _day=%~3
        set _i=0
        for %%a in (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4) do (
            set _months[!_i!]=%%~a
            set /a _i+=1
        )
        if !_month! lss 3 (
            set /a _year-=1
        )
        set /a _monthindex=!_month!-1
        for %%a in (!_monthindex!) do set /a _nb=(!_year! + !_year!/4 - !_year!/100 + !_year!/400 + !_months[%%~a]! + !_day!) %% 7
        if !_nb! equ 0 set %~4=Dimanche
        if !_nb! equ 1 set %~4=Lundi
        if !_nb! equ 2 set %~4=Mardi
        if !_nb! equ 3 set %~4=Mercredi
        if !_nb! equ 4 set %~4=Jeudi
        if !_nb! equ 5 set %~4=Vendredi
        if !_nb! equ 6 set %~4=Samedi
    exit /b 0
    :IsExistDate <Year> <Month> <Day>
        if %~2 lss 1 exit /b 1
        if %~2 gtr 12 exit /b 1
        if %~3 lss 1 exit /b 1
        if %~3 gtr 31 exit /b 1
        if %~2 equ 2 (
            set _leapv1=0
            set _leapv2=0
            set /a _leap1=%~1 %% 4
            set /a _leap2=%~1 %% 100
            set /a _leap3=%~1 %% 400
            if !_leap1! equ 0 set _leapv1=1
            if !_leap2! neq 0 set _leapv2=1
            if !_leap3! equ 0 set _leapv2=1
            set _leap=0
            if !_leapv1! equ 1 if !_leapv2! equ 1 set _leap=1
            if !_leap! equ 1 (
                if %~3 leq 29 exit /b 0
                exit /b 1
            ) else (
                if %~3 leq 28 exit /b 0
                exit /b 1
            )
        )
        set _m=0
        if %~2 equ 4 set _m=1
        if %~2 equ 6 set _m=1
        if %~2 equ 9 set _m=1
        if %~2 equ 11 set _m=1
        if !_m! equ 1 (
            if %~3 leq 30 exit /b 0
            exit /b 1
        )
    exit /b 0

    Avec ce nouveau script, j'obtiens ce résultat :
    Tapez le jour (exemple: 23) :29
    Tapez le mois (exemple: 7) :2
    Tapez l'annee de debut (example: 1974) :1920
    Tapez l'annee de fin (example: 2021) :2016

    Vendredi 29 2 1924
    Vendredi 29 2 1952
    Vendredi 29 2 1980
    Vendredi 29 2 2008
    Ce qui est maintenant correcte puisque les dates qui n'existent pas ont été supprimées.

    Petite remarque : ce script fonctionne pour toutes les dates du calendrier Grégorien puisque comme le calendrier Grégorien boucle sur lui-même tout les 400 ans, ce script est valide même pour des dates extrêmement lointaines.

    Et je m'excuse pour mon manque de rigueur. Je n'ai pas pensé à vérifier les dates


    Edit: j'ai rajouté ton petit code pour choisir le jour
    Edit 2: comme ce code n'utilise que des opérations arithmétiques (addition, division, modulo, ...) et n'utilise aucune spécificité du batch. Ce code peut être aisément traduit dans d'autres langages

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 126
    Points : 76
    Points
    76
    Par défaut
    Bonsoir Flammrock.

    Merci pour cette information : ce script fonctionne pour toutes les dates du calendrier Grégorien puisque comme le calendrier Grégorien boucle sur lui-même tout les 400 ans, ce script est valide même pour des dates extrêmement lointaines.

    Je voudrais savoir autre chose. Comment afficher le jour que je ne connais pas d'une date puis les années qui correspondent à cette date ?

    Je tape le jour en chiffre : 29
    Je tape le mois en chiffre : 2
    Je tape l'année : 1920
    Je tape le début de l'année : 1920
    Je tape la fin de l'année : 2016

    Le batch doit afficher le jour, c'est-à-dire dimanche

    Puis afficher les années (de 1920 à 2016) où le 29 février est tombé par un dimanche

    dimanche 29 février 1920
    dimanche 29 février 1948
    dimanche 29 février 1976
    dimanche 29 février 2004


    Merci.

  12. #12
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 48
    Points
    48
    Par défaut
    Pour faire ça, c'est relativement simple. Dans ce script batch, il y a 2 fonctions :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    :GetDay <Year> <Month> <Day> <Out:Name>

    Cette fonction permet de récupérer le nom du jour d'une date (comme tu as pu le constater, cette fonction fonctionne même avec des dates qui n'existent pas , donc il faudra vérifier si la date existe bien avec la 2ème fonction (j'en parle plus bas)).
    Par conséquent, cette "fonction" s'utilise comme ceci :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set year=1920
    set month=2
    set day=29
    call :GetDay !year! !month! !day! name
    echo;Le nom du jour est !name!

    et :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    :IsExistDate <Year> <Month> <Day>

    Comme son nom l'indique, cette fonction permet de vérifier si une date existe ou pas. Elle s'utilise comme ceci :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set year=1920
    set month=2
    set day=29
    call :IsExistDate !year! !month! !day! && (
        echo;exist
    ) || (
        echo;does not exist
    )


    Citation Envoyé par tease Voir le message
    Je voudrais savoir autre chose. Comment afficher le jour que je ne connais pas d'une date puis les années qui correspondent à cette date ?

    Je tape le jour en chiffre : 29
    Je tape le mois en chiffre : 2
    Je tape l'année : 1920
    Je tape le début de l'année : 1920
    Je tape la fin de l'année : 2016

    Le batch doit afficher le jour, c'est-à-dire dimanche

    Puis afficher les années (de 1920 à 2016) où le 29 février est tombé par un dimanche

    dimanche 29 février 1920
    dimanche 29 février 1948
    dimanche 29 février 1976
    dimanche 29 février 2004
    En s'appuyant des deux fonctions ci-dessus, on peut aboutir à ce code :

    Code batch : 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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    @echo off
    setlocal enabledelayedexpansion
     
     
     
    :input
    set /p day=Tapez le jour (exemple: 29) :
    set /p month=Tapez le mois (exemple: 2) :
    set /p year=Tapez l'annee (exemple: 1920) :
    call :IsExistDate !year! !month! !day! || (
        echo;
        echo;!year!/!month!/!day! n'existe pas
        set /p ".=Appuyez sur une touche pour recommencer la saisie..."<nul
        pause>nul
        cls
        goto :input
    )
    call :GetDay !year! !month! !day! name_must_be
     
    set /p yearstart=Tapez l'annee de debut (example: 1920) :
    set /p yearend=Tapez l'annee de fin (example: 2021) :
     
    echo;
     
    for /l %%i in (!yearstart!,1,!yearend!) do (
        set year=%%i
        call :GetDay !year! !month! !day! name
        call :IsExistDate !year! !month! !day! && (
            if /i "!name!"=="!name_must_be!" echo;!name_must_be! !day! !month! !year!
        )
    )
     
     
    pause>nul&exit
    rem Conway's Doomsday Rule
    :GetDay <Year> <Month> <Day> <Out:Name>
        set _year=%~1
        set _month=%~2
        set _day=%~3
        set _i=0
        for %%a in (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4) do (
            set _months[!_i!]=%%~a
            set /a _i+=1
        )
        if !_month! lss 3 (
            set /a _year-=1
        )
        set /a _monthindex=!_month!-1
        for %%a in (!_monthindex!) do set /a _nb=(!_year! + !_year!/4 - !_year!/100 + !_year!/400 + !_months[%%~a]! + !_day!) %% 7
        if !_nb! equ 0 set %~4=Dimanche
        if !_nb! equ 1 set %~4=Lundi
        if !_nb! equ 2 set %~4=Mardi
        if !_nb! equ 3 set %~4=Mercredi
        if !_nb! equ 4 set %~4=Jeudi
        if !_nb! equ 5 set %~4=Vendredi
        if !_nb! equ 6 set %~4=Samedi
    exit /b 0
    :IsExistDate <Year> <Month> <Day>
        if %~2 lss 1 exit /b 1
        if %~2 gtr 12 exit /b 1
        if %~3 lss 1 exit /b 1
        if %~3 gtr 31 exit /b 1
        if %~2 equ 2 (
            set _leapv1=0
            set _leapv2=0
            set /a _leap1=%~1 %% 4
            set /a _leap2=%~1 %% 100
            set /a _leap3=%~1 %% 400
            if !_leap1! equ 0 set _leapv1=1
            if !_leap2! neq 0 set _leapv2=1
            if !_leap3! equ 0 set _leapv2=1
            set _leap=0
            if !_leapv1! equ 1 if !_leapv2! equ 1 set _leap=1
            if !_leap! equ 1 (
                if %~3 leq 29 exit /b 0
                exit /b 1
            ) else (
                if %~3 leq 28 exit /b 0
                exit /b 1
            )
        )
        set _m=0
        if %~2 equ 4 set _m=1
        if %~2 equ 6 set _m=1
        if %~2 equ 9 set _m=1
        if %~2 equ 11 set _m=1
        if !_m! equ 1 (
            if %~3 leq 30 exit /b 0
            exit /b 1
        )
    exit /b 0

    Tu pourras remarquer que je n'ai pas tellement modifier le code. J'ai designé les "fonctions" pour qu'elles soient assez facile à utiliser.
    En exécutant ce code, j'obtiens ceci :
    Tapez le jour (exemple: 29) :29
    Tapez le mois (exemple: 2) :2
    Tapez l'annee (exemple: 1920) :1920
    Tapez l'annee de debut (example: 1920) :1920
    Tapez l'annee de fin (example: 2021) :2021

    Dimanche 29 2 1920
    Dimanche 29 2 1948
    Dimanche 29 2 1976
    Dimanche 29 2 2004

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici un exemple en PowerShell pour faire un peu de promotion

    Code powershell : 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
    $startYear = Read-Host -Prompt "Je tape le début d'une année"
    $endYear = Read-Host -Prompt "Je tape la fin d'une année"
    $dateDay = Read-Host -Prompt "Je tape le jour"
    $dateMonth = Read-Host -Prompt "Je tape le mois"
    $dateYear = Read-Host -Prompt "Je tape l'année"
    Write-Host ""
     
    $cultureFr = [Globalization.CultureInfo]::CreateSpecificCulture('fr-FR')
     
    try
    {
        $refDate = [datetime]::ParseExact("$dateDay/$dateMonth/$dateYear", "d/M/yyyy", $cultureFr)
    }
    catch
    {
        Write-Host "Date de référence invalide"
        exit
    }
     
    Write-Host "Le $($refDate.ToString("d/M/yyyy")) est un $($culture.DateTimeFormat.GetDayName($refDate.DayOfWeek))`n"
     
    $startYear..$endYear | ForEach-Object {
        try
        {
            [datetime]::ParseExact("$dateDay/$dateMonth/$_", "d/M/yyyy", $cultureFr)
        }
        catch
        {
        }
    } | Where-Object {$_.DayOfWeek -eq $refDate.DayOfWeek} | ForEach-Object {$_.ToLongDateString()}

    Résultat
    Je tape le début d'une année : 1900
    Je tape la fin d'une année : 2021
    Je tape le jour : 17
    Je tape le mois : 7
    Je tape l'année : 2021

    Le 17/7/2021 est un samedi

    samedi 17 juillet 1909
    samedi 17 juillet 1915
    samedi 17 juillet 1920
    samedi 17 juillet 1926
    samedi 17 juillet 1937
    samedi 17 juillet 1943
    samedi 17 juillet 1948
    samedi 17 juillet 1954
    samedi 17 juillet 1965
    samedi 17 juillet 1971
    samedi 17 juillet 1976
    samedi 17 juillet 1982
    samedi 17 juillet 1993
    samedi 17 juillet 1999
    samedi 17 juillet 2004
    samedi 17 juillet 2010
    samedi 17 juillet 2021
    PS : la plage de date possible est du 1er janvier 0001 au 31 décembre 9999 dans le calendrier grégorien

  14. #14
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 126
    Points : 76
    Points
    76
    Par défaut
    Bonjour Flammrock

    Merci infiniment pour les explications données et le script qui fonctionne à merveille.

    Bonjour ericlm128.
    Merci de m'avoir suggéré PowerShell mais ce n'est pas mon fort.

    Merci à tous les intervenants. Bonne journée, bonne santé et à plus peut-être.

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

Discussions similaires

  1. [Vxi3] Afficher les 30 derniers jours dans un graph
    Par Marshall06 dans le forum Deski
    Réponses: 4
    Dernier message: 23/03/2011, 16h16
  2. [ZF 1.10] Afficher les informations par jour, semaine et mois
    Par king_soft dans le forum Zend Framework
    Réponses: 1
    Dernier message: 27/12/2010, 12h45
  3. Requête qui affiche les rdv DU JOUR
    Par fanico11 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 24/04/2008, 16h22
  4. [Dates] Afficher les 7 derniers jours
    Par fabien14 dans le forum Langage
    Réponses: 7
    Dernier message: 12/05/2007, 00h16

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