En fait, avec les extensions de commande, tu ne peux hélas
PAS déterminer comme ça le jour courant...
Petite illustration :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @echo off
setlocal enableextensions
echo With extensions:
REM Habituellement remplacé par "date /t", qui évite d'avoir à découper le résultat...
echo. > __dummy__
date < __dummy__ > __dummy2__
type __dummy2__
del /q __dummy__ __dummy2__ > NUL
echo.
endlocal
setlocal disableextensions
echo No extensions:
echo. > __dummy__
date < __dummy__ > __dummy2__
type __dummy2__
del /q __dummy__ __dummy2__ > NUL
echo.
endlocal |
Le résultat de la commande donne ceci :
1 2 3 4 5 6 7
| With extensions:
La date du jour est : 03/03/2010
Entrez la nouvelle date : (jj-mm-aa)
No extensions:
La date du jour est : mer. 03/03/2010
Entrez la nouvelle date : (jj-mm-aa) |
Notez la partie en rouge.
Donc, pour récupérer la date courante, tu peux tester ce batch :
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
| @echo off
setlocal enableextensions enabledelayedexpansion
call :getcurrentday JOUR
echo Nous sommes le jour !JOUR! de la semaine.
goto :eof
REM Paramètre %1 : ***NOM*** de la variable qui va recevoir le jour de la semaine.
REM Retour : jour numérique de la semaine, Lundi=1, Mardi=2, ... Dimanche=7.
:getcurrentday
if @%1==@ (
echo :getcurrentday =^> missing parameter.
goto :eof
)
set gcd_tmp=__dummy__
REM Bloc sans extensions de commandes.
setlocal disableextensions
echo. > %gcd_tmp%2
date < %gcd_tmp%2 > %gcd_tmp%
endlocal
REM Filtrage du résultat.
for /f "usebackq tokens=1,* delims=:" %%I in (`type %gcd_tmp% ^| find "%DATE%"`) do (
set gcd_date=%%J
)
del /q %gcd_tmp% %gcd_tmp%2 > NUL
REM Découpe du jour de la semaine, on garde 3 lettres uniquement.
for /f "usebackq tokens=1" %%I in (`echo %gcd_date%`) do (
set gcd_day=%%I
set gcd_day=!gcd_day:.=!
set gcd_day=!gcd_day:~0,3!
)
REM Analyse du jour (français/anglais).
if /i !gcd_day! EQU lun set /a %1=1
if /i !gcd_day! EQU mon set /a %1=1
if /i !gcd_day! EQU mar set /a %1=2
if /i !gcd_day! EQU tue set /a %1=2
if /i !gcd_day! EQU mer set /a %1=3
if /i !gcd_day! EQU wed set /a %1=3
if /i !gcd_day! EQU jeu set /a %1=4
if /i !gcd_day! EQU thu set /a %1=4
if /i !gcd_day! EQU ven set /a %1=5
if /i !gcd_day! EQU fri set /a %1=5
if /i !gcd_day! EQU sam set /a %1=6
if /i !gcd_day! EQU sat set /a %1=6
if /i !gcd_day! EQU dim set /a %1=7
if /i !gcd_day! EQU sun set /a %1=7
set gcd_tmp=
set gcd_date=
set gcd_day=
goto :eof |
Tu peux directement copier/coller le sous-programme ":getcurrentday" dans ton propre batch, et regarde l'exemple d'utilisation au début.
Attention, il te FAUT ajouter le "setlocal" initial (ligne 2), tel quel, sinon cela ne marchera pas.
Partager