GhostDJ a écrit :
il est tout daubé ton script désolé de dire ca mais je l'ai testé et j'ai eu quelques soucis, deja il me descend l'année en plein mois de juin (qd on met 1/06/XX pour avoir 31/05/XX), ensuite quand on met 1/7 il donne 31/06 ... enfin bref, je comptais débuggé mais là je commence à me dire que je v cherché ailleurs si qq1 en a pas un qui marche
|
J'ai corrigé les quelques erreurs indiquées, et j'ai ajouté la possibilité de passer une date en paramètre.
A noter la vérification concernant l'année bissextile ou pas (pas limitée aux années 2008 a 2032).
Voici le batch corrigé qui a l'air de fonctionner (dernière minute: il y a un souci quand on est le 08 ou le 09 du mois: du fait du chiffre 0, on considère qu'il s'agit d'un nombre en octal, et en octal, il n'y a pas de chiffre 8 ou 9... pour les calculs, il faut supprimer le chiffre 0... Mais pour le moment, je n'ai pas trop de temps pour corriger ce bug...) :
@echo off
cls
echo ################################
echo # Gestion des dates sous dos #
echo # au format jj/mm/aaaa #
echo ################################
echo.
Rem #######################################
Rem #######################################
Rem ## Adapter les chmps de récupération en fonction des paramètres régionaux de votre PC
Rem ## Car la date ici est 18/06/2066
Rem ## Mais elle peut être :
Rem ## Dim 18/06/2006 10:00:03
Rem ##
Rem ## Pour l'heure c'est idem sauf que c'est %Time:~0,2% ...etc...
Rem #######################################
Rem #######################################
set wdate=%1
if X%wdate% EQU X set wdate=%DATE%
echo la date demandée est : %wdate%
echo.
Set Djour=%wdate:~0,2%
Set Dmois=%wdate:~3,2%
Set Dannee=%wdate:~6,4%
set w=%Dannee%
set /A w1=%w% / 4 * 4
if %w% EQU %w1% goto s1
set bis="N"
goto :s2
:s1
set bis="O"
:s2
echo la date du jour sans / est : %Djour% %Dmois% %Dannee%
echo.
Rem ############## Plus simple
Set Djjmmaaaa=%wdate:~0,2% %wdate:~3,2% %wdate:~6,4%
echo la date de jour plus simplement est : %Djjmmaaaa%
echo.
Rem ############## Remplacement des / par -
Set Djjmmaaaa=%wdate=-%
Echo la date du jour en remplaçant / par - est : %Djjmmaaaa%
echo.
echo #####################
echo # Date du jour - 1 #
echo #####################
echo.
If Not %DJour:~0,2% EQU 01 goto D-1
Rem ############# si le jour n'est par 1 on soustrait juste (voir D-1)
Rem ############# Il faut calculer le mois si 28, 29 30 ou 31 jour pour faire mois -1 !
If %Dmois% == 01 goto DECEMBRE
If %Dmois% == 03 goto MARS
If %Dmois% == 05 goto Mois30
If %Dmois% == 07 goto Mois30
If %Dmois% == 08 goto DECEMBRE
If %Dmois% == 10 goto Mois30
If %Dmois% == 12 goto Mois30
Rem ############# Le mois actuel est un mois de 30 jours et pas Janvier ou Mars
Set Djour=31
Set /A Dmois=%Dmois% - 1
Rem ############# On ajour un 0 pour l'affichage si le mois est de 01 à 09
IF %Dmois% LSS 10 set Dmois=0%Dmois%
Goto Suite
Rem ############## Je suis le 1 Janvier, je passe en 31 décembre année - 1
Rem ############## Je suis le 1 Aout, je passe le 31 Juillet
ECEMBRE
Set Djour=31
If %Dmois% == 08 goto AOUT
Set Dmois=12
Set /A Dannee=%Dannee% - 1
Goto suite
:AOUT
Set Dmois=07
goto Suite
:MARS
If Not %Dmois% == 03 goto M04
Rem ############# On est au mois de mars donc il faut calculer le mois de février
if %bis% EQU "O" goto NBCT
Rem ############## Mois de Février Normal
Set Djour=28
Set Dmois=02
Goto Suite
:NBCT
Rem ############# Année Bct Mois de Février 28 jours
Set Djour=29
Set Dmois=02
Goto Suite
Rem ############# Le mois actuel est un mois de 31 jours et pas Mars ou Aout
:Mois30
Set Djour=30
Set Mt=%Dmois%
Set /A Dmois=%Mt% - 1
Rem ############# On ajour un 0 pour l'affichage si le mois est de 01 à 09
IF %Dmois% LSS 10 set Dmois=0%Dmois%
Goto Suite
-1
Set /A DJour=%DJour% - 1
IF %Djour% LSS 10 set Djour=0%Djour%
:Suite
echo %Djour%/%Dmois%/%Dannee%
Echo.
Echo Reste a vous la formater comme bon il vous semble !
Echo.