Gestion Date , Date -1 sous dos - Shell/Batch - Programmation
Marsh Posté le 21-06-2006 à 10:44:48
Salut,
j'ai voulu me servir de ton script mais j'ai quelques soucis :
j'ai testé la premiere partie, donc copié coller, j'ai renommé le .txt en .bat et j'obtient ce résultat :
Je suis au bureau, donc j'ai testé sur une machine win2000pro et une autre win2003 server.
Comme tu peux le voir il y a un petit soucis par rapport à la date du jour et du mois.
Peux tu m'expliquer a quoi sert le 3,2% etc pour les dates, j'ai vu ca dans plusieurs scripts manipulant les dates mais aucun n'est commenté donc je comprend pas.
Merci d'avance pour ton aide.
Marsh Posté le 21-06-2006 à 12:58:56
C'est normal, puisque comme tu as remarqué, ce code n'est pas universel :
Code :
|
Il dépend du format de la date sur ton système.
Pour comprendre la signification de
%VAR:~x,y%
tape
set /?
à l'invite de commandes.
Sinon, pour info, malgré cette fenêtre noire, ce n'est pas du DOS qu'on est en train de bosser dessus mais la ligne de commandes Windows.
Marsh Posté le 21-06-2006 à 14:15:19
ok
merci pour ces infos, en effet j'ai adapté mon code au systeme correspondant... et j'ai compris au fur et a mesure la signification de %var:~x,y%
Pour ceux qui cherche, ca permet de découper la chain de caractere, un peu a la substring
Marsh Posté le 26-06-2006 à 10:57:08
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
Marsh Posté le 23-03-2011 à 10:46:42
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.
Marsh Posté le 08-11-2011 à 14:54:19
Bonjour,
merci aux contributeurs pour ce script, je l'ai revu et corrigé à ma sauce (gestion plus précise des années bissextiles et gestion du problème du 0) et vous en propose la lecture :
@ECHO ON
CLS
SET wDate=%1
IF X%wDate% EQU X (SET wDate=%DATE%)
SET dJour=%wDate:~0,2%
SET dMois=%wDate:~3,2%
SET dAnnee=%wDate:~6,4%
IF %dJour:~0,1% == 0 (SET dJour=%dJour:~1,1%)
IF %dMois:~0,1% == 0 (SET dMois=%dMois:~1,1%)
SET /A nJour=%dJour% - 1
SET /A nMois=%dMois%
SET /A nAnnee=%dAnnee%
IF %nJour% EQU 0 GOTO MOIS_MOINS1
GOTO SORTIE
:MOIS_MOINS1
ECHO Changement de mois (Mois - 1)
SET /A nMois=%dMois%-1
SET nJour=31
REM Annee bissextile = divisible par 4 mais pas par 100 ou par 400
SET /A tAn4=%dAnnee% / 4 * 4
SET /A tAn100=%dAnnee% / 100 * 100
SET /A tAn400=%dAnnee% / 400 * 400
IF %nMois% EQU 0 GOTO ANNEE_MOINS1
IF %nMois% EQU 2 (
IF %dAnnee% EQU %tAn4% (
IF %dAnnee% EQU %tAn100% (
IF %dAnnee% EQU %tAn400% (SET nJour=29) ELSE (SET nJour=28)
) ELSE (SET nJour=29)
) ELSE (SET nJour=28)
)
IF %nMois% EQU 4 (SET nJour=30)
IF %nMois% EQU 6 (SET nJour=30)
IF %nMois% EQU 9 (SET nJour=30)
IF %nMois% EQU 11 (SET nJour=30)
GOTO SORTIE
:ANNEE_MOINS1
ECHO Changement d'annee (Annee - 1)
SET nJour=31
SET nMois=12
SET /A nAnnee=%dAnnee%-1
GOTO SORTIE
:SORTIE
IF %nJour% LEQ 9 (SET dJour=0%nJour%) ELSE (SET dJour=%nJour%)
IF %nMois% LEQ 9 (SET dMois=0%nMois%) ELSE (SET dMois=%nMois%)
SET dAnnee=%nAnnee%
SET wDate=%dJour%/%dMois%/%dAnnee%
Si ça peut servir....
JohnFuss.
Marsh Posté le 18-06-2006 à 10:35:40
Fréquement je vois des questions concernant les date sous dos.
Ne serait-ce que pour créer des fichiers avec la date, ou gérer des backups...etc..
Où il est bien d'avoir la date au format AAAA-MM-JJ
Donc voilà un .cmd de permet de manipuler les dates sous dos...
A vous de l'adapter comme bon il vous semble !
@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 #######################################
echo la date systeme est : %DATE%
echo.
Set Djour=%DATE:~0,2%
Set Dmois=%DATE:~3,2%
Set Dannee=%DATE:~6,4%
echo la date du jour sans / est : %Djour% %Dmois% %Dannee%
echo.
Rem ############## Plus simple
Set Djjmmaaaa=%DATE:~0,2% %DATE:~3,2% %DATE:~6,4%
echo la date de jour plus simplement est : %Djjmmaaaa%
echo.
Rem ############## Remplacement des / par -
Set Djjmmaaaa=%DATE:/=-%
Echo la date du jour en remplaçant / par - est : %Djjmmaaaa%
echo.
echo ################################
echo # Date du jour - 1 #
echo ################################
echo.
If Not %DATE:~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%
Set /A Dannee=%Dannee% - 1
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
:DECEMBRE
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 %Dannee% == 2008 goto NBCT
If %Dannee% == 2012 goto NBCT
If %Dannee% == 2016 goto NBCT
If %Dannee% == 2020 goto NBCT
If %Dannee% == 2024 goto NBCT
If %Dannee% == 2028 goto NBCT
If %Dannee% == 2032 goto NBCT
Rem ############## Mois de Février Normal
Set Djour=28
Set /A Dmois=%Dmois% - 1
IF %Dmois% LSS 10 set Dmois=0%Dmois%
Goto Suite
:NBCT
Rem ############# Année Bct Mois de Février 28 jours
Set Djour=29
Set /A Dmois=%Dmois% - 1
IF %Dmois% LSS 10 set Dmois=0%Dmois%
Goto Suite
Rem ############# Le mois actuel est un mois de 31 jours et pas Mars ou Aout
:Mois30
Set Djour=31
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
:D-1
Set /A DJour=%Jour% - 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.
Fred