Fractionner%%% dans un fichier de commandes sans tenir compte des parameters régionaux

Existe-t-il un moyen de fractionner le %date% dans un fichier de commandes (par exemple, en 3 variables d’environnement), mais indépendamment des parameters régionaux? La date d’aujourd’hui serait le 3/13/2013 pour les États-Unis, mais avec mes parameters régionaux, il s’agit du 13.3.2013le délimiteur est modifié et l’ordre également .

Vous pouvez le faire en utilisant wmic (mais WMIC n’est pas inclus avec XP Home):

 @ECHO OFF :: Check WMIC is available WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error :: Use WMIC to resortingeve date and time FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO ( IF "%%~L"=="" goto s_done Set _yyyy=%%L Set _mm=00%%J Set _dd=00%%G Set _hour=00%%H SET _minute=00%%I ) :s_done :: Pad digits with leading zeros Set _mm=%_mm:~-2% Set _dd=%_dd:~-2% Set _hour=%_hour:~-2% Set _minute=%_minute:~-2% :: Display the date/time in ISO 8601 format: Set _isodate=%_yyyy%-%_mm%-%_dd% %_hour%:%_minute% Echo %_isodate% GOTO:EOF :s_error Echo GetDate.cmd Echo Displays date and time independent of OS Locale, Language or date format. Echo Requires Windows XP Professional, Vista or Windows 7 Echo. Echo Returns 6 environment variables containing isodate,Year,Month,Day,hour and minute. 

Et vous pouvez le faire en analysant la commande de date pour rechercher le format de date actuel requirejs.

Le premier lien indique que vous devrez peut-être modifier le code dans Win7, pour gérer quelques rides supplémentaires autour du formulaire de date courte / longue.

Quatre ans ont passé, mais cette question ne vieillit pas, et je pense que maintenant, la réponse est légèrement meilleure que celle de wmic (à partir de win7).

 for /F "tokens=1,2,3 delims=_" %%i in ('PowerShell -Command "& {Get-Date -format "MM_dd_yyyy"}"') do ( set MONTH=%%i set DAY=%%j set YEAR=%%k ) echo %MONTH% %DAY% %YEAR% 

Avec Powershell Get-Date vous pouvez ajuster le format souhaité (court, long, chiffres, noms, etc.). Dans cet exemple, “MM_dd_yyyy” vous donnera une date numérique avec des zéros en tête en cas de mois ou de jours à un chiffre

J’ai retravaillé la version de sashoalm pour prendre en charge la situation supprimée:

 @Echo OFF SETLOCAL If "%Date%A" LSS "A" (Set _NumTok=1-3) Else (Set _NumTok=2-4) :: Default Delimiter of TAB and Space are used For /F "TOKENS=2*" %%A In ('REG QUERY "HKCU\Control Panel\International" /v iDate') Do Set _iDate=%%B For /F "TOKENS=2*" %%A In ('REG QUERY "HKCU\Control Panel\International" /v sDate') Do Set _sDate=%%B IF %_iDate%==0 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%H %%F %%G IF %_iDate%==1 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%H %%G %%F IF %_iDate%==2 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%F %%G %%H endlocal&SET YYYYMMDD=%YYYYMMDD% GOTO :eof :: :: Date elements are supplied in Y,M,D order but may have a leading zero :: :procdate :: if single-digit day then 1%3 will be <100 else 2-digit IF 1%3 LSS 100 (SET YYYYMMDD=0%3) ELSE (SET YYYYMMDD=%3) :: if single-digit month then 1%2 will be <100 else 2-digit IF 1%2 LSS 100 (SET YYYYMMDD=0%2%YYYYMMDD%) ELSE (SET YYYYMMDD=%2%YYYYMMDD%) :: Similarly for the year - I've never seen a single-digit year IF 1%1 LSS 100 (SET YYYYMMDD=20%YYYYMMDD%) ELSE (SET YYYYMMDD=%1%YYYYMMDD%) GOTO :eof 

renvoyer AAAAMMJJ - sous-chaîne à votre gré.

Fait intéressant, l'insertion après SETLOCAL

 IF NOT "%1"=="" set date=%1 

permettra de décoder toute date de la séquence locale (sans le nom de jour) en AAAAMMJJ (mais veillez à ce que les dates 19xx fournies avec la forme yy apparaissent comme 20xx - facilement compensées si vous le trouvez nécessaire)

Essayez ceci: Set_date.cm

 @echo off&goto :start :Set_Date DateEnv [Date] or [/p="Prompt for Date: "] [/r] echo. echo.Usage: Set_Date.cmd DateEnv [Date] or [/p="Prompt for Date: "] echo.Populates date variables labeled: 'DateEnv_???', see below echo.Accepted date formats: echo. mdy, m/d/y, yyyymmdd, dd-Mon-yy or 7 digit julian date echo. If "%%date%%" is passed as the 2nd arg it will be interpreted echo. according to the current regional date setting ie. day dd/mm/yyyy echo. If /r is passed then the date contained in the DateEnv variable echo. and/or the [Date] argument will be interpreted in regional format echo. The /r option should be placed at the end of the list if used echo. The /r option should only be used if date input is not included echo. in one of the default listed formats or unexpected consequences... echo. echo.DateEnv, if passed alone may be a valid defined date variable or if echo.undefined then todays date will be used to populate the variables echo.Two digit years input 'XX' are interpreted as the year '20XX' echo.Valid dates must be in the year 1601 or greater for the validity check echo.Returns 0 in errorlevel if the date is valid, else non-zero echo. echo.If DateEnv is valid or if [Date] is passed DateEnv_??? will be set to: echo.DateEnv_mdy will be set to mm-dd-yyyy echo.DateEnv_ymd will be set to yyyymmdd echo.DateEnv_y.md will be set to yyyy.mm.dd echo.DateEnv_dte will be set to the current active regional date format echo.DateEnv_jul will be set to the 7 digit Julian date echo.DateEnv_dow will be set to day of week, ie. Monday, Tuesday, etc. echo.DateEnv_vrb will be set to Verbose Date, ie. Saturday, August 20th, 2011 echo.DateEnv_dd will be set to the 2 digit day echo.DateEnv_mm will be set to the 2 digit month echo.DateEnv_yyyy will be set to the 4 digit year echo.DateEnv_month will be set to the month, ie. February or December echo.DateEnv_mon will be set to the 3 letter month, ie. Jan or Aug echo. echo.DateEnv itself will not be changed regardless if its a valid date or not echo.Also formats yyyymmdd or 7 digit julian date input to desired output echo.Example: Set_Date today "%%date%%" or Set_Date newyear99 01-Jan-99 echo. echo.Finally: echo.If DateEnv is not defined and there is no second argument then %%date%% in echo.the current regional format will be used to populate the variables echo.If /p is passed as 2nd argument then quoted 3rd argument will prompt for date echo. echo.Examples: echo. set "AprilsFools=4/1/1" echo. set_date AprilFools echo. echo Aprils fools date for 2001 in Julian format is: %%AprilFools_jul%% echo. echo Aprils fools date in 2001 was on a %AprilFools_dow% ^(Sunday^) echo. Set_Date birthday /p="Enter your birth date: " echo. ECHO You were born on a %%birthday_dow%% echo. set "today=" echo. Set_Date today echo. echo today is %%today_dte%% or %%today_jul%% in Julian format echo. echo.If the '/p' option is used then the _GetSsortingng.cmd routine must be in the PATH echo. or else set/p routine will ask for date with no validity checking exit /b 1 :start set "jul="&set "Format="&set "Sep="&set "reg=" if "%~1"=="" exit /b 255 if /i "%~1" equ "/?" goto :Set_Date Syntax SetLocal EnableDelayedExpansion echo %*|find /i "/r">nul if %errorlevel% equ 0 set/a reg=1&if /i "%~1" equ "/r" shift if defined %~1 (call set jul=%%%~1%%) else ( if "%~2"=="" set "jul=%date%" ) if not "%~2"=="" ( if /i "%~2" neq "/r" ( set "jul=%~2"&set "args=%~3" ) ) else (if not defined %~1 set/a reg=1) call :RegDateFmt Format Separator yy mm dd jul if %errorlevel% neq 0 goto :BadDate if /i "%~2" equ "%date%" set/a reg=1 if defined reg ( set "jul=!mm!-!dd!-!yy!" ) if /i "%jul%" equ "/p" ( call :_GetSsortingng.cmd "%args%" jul /d if !errorlevel! gtr 0 goto :BadDate ) else if /i "%jul:~0,1%" gtr "9" ( if defined args set "jul=%jul% %args%" set "jul=!jul:* =!" ) else if /i "%jul:~3,1%" gtr "9" ( set "Mon=%jul:~3,3%" call :month_convert Mon if !errorlevel! gtr 0 goto :BadDate set "jul=!Mon!-%jul:~0,2%-%jul:~-2%" ) set mdy=%jul:/=% set mdy=%mdy:-=% if /i %mdy% equ %jul% ( call :strlen %mdy% if /i !errorlevel! equ 7 ( call :date_cvt mdy /j ) else (call :date_cvt jul /j) ) else (call :date_cvt jul /j) if /i %errorlevel% equ 0 ( set/a mdy=%jul% set/a dow=%jul% %% 7&call :set_day dow ) else (goto :BadDate) call :date_cvt mdy /j set "vrb=%mdy%" call :format_verbose vrb dow month set/a ymd=%errorlevel% set "mon=%month:~0,3%" set/a dte=%ymd% call :setRegDate dte Format Separator dow mon if /i %errorlevel% gtr 0 goto :BadDate Endlocal&( call set "%~1_mdy=%mdy%"&call set "%~1_ymd=%ymd%"&call set "%~1_jul=%jul%" call set "%~1_vrb=%vrb%"&call set "%~1_dow=%dow%"&call set "%~1_dd=%ymd:~-2%" call set "%~1_mm=%mdy:~0,2%"&call set "%~1_yyyy=%ymd:~0,4%" call set "%~1_mon=%mon%"&call set "%~1_yy=%ymd:~2,2%"&call set "%~1_dte=%dte%" call set "%~1_y.md=%ymd:~0,4%.%mdy:~0,2%.%ymd:~-2%"&call set "%~1_month=%month%" exit /b 0 ) :BadDate Endlocal&( call set "%~1_mdy="&call set "%~1_ymd="&call set "%~1_dte="&call set "%~1_jul=" call set "%~1_vrb="&call set "%~1_dow="&call set "%~1_vrb="&call set "%~1_y.md=" call set "%~1_month=" )&exit /b %errorlevel% ::**********************************:: ::*******|| SUBROUTINES ||*******:: ::**********************************:: :set_day SetLocal&call set/a tkn=%%%~1%%+1 for /f "tokens=%tkn%" %%a in ("Monday Tuesday Wednesday Thursday Friday Saturday Sunday") do ( set "dayofwk=%%a" ) EndLocal&call set %~1=%dayofwk%&exit /b 1 :Date_Cvt DateEnv [/Julian] Date_env is converted if "%~1"=="" exit /b 1 SetLocal&call set "mdy=%%%~1%%" set ech=&set "arg=" if not "%~2"=="" (set arg=%~2&set arg=!arg:~0,2!) xcopy /d:%mdy% /h /l "%~f0" "%~f0\">nul 2>&1 if /i %errorlevel% equ 0 ( for /f "tokens=1-3 delims=/- " %%a in ("%mdy%") do ( set m=%%a&set d=%%b&set "y=%%c" if /i 1!m! lss 20 set "m=0!m!" if /i 1!d! lss 20 set "d=0!d!" if /i 1!y! lss 20 set "y=0!y!" if /i !y! lss 80 (set y=20!y!) else (if !y! lss 100 set y=19!y!) set "mdy=!m!-!d!-!y!" ) ) else ( set /a rc=1 for /f "tokens=1-3 delims=0123456789" %%a in ("%mdy%") do set "rc=%%a" if /i !rc! neq 1 set /a err=2&goto :end call :strlen %mdy% if /i !errorlevel! gtr 8 set /a err=3&goto :end ) set "mdy=%mdy:/=-%" set "ymd=%mdy:-=%" if %ymd%==%mdy% ( call :strlen %ymd% set /a err=!errorlevel! if /i !err! equ 7 if /i "%arg%" equ "/j" ( call :gdate %ymd% set /a ymd=!errorlevel! set /a err=8&set "arg=" ) if /i !err! neq 8 goto :end set mdy=!ymd:~4,2!-!ymd:~6,2!-!ymd:~0,4!&set "ech=!mdy!" ) else ( set ymd=%ymd:~4,4%%ymd:~0,4%&set "ech=!ymd!" ) xcopy /d:%mdy% /h /l "%~f0" "%~f0\">nul 2>&1 set /a err=%errorlevel% if /i %err% neq 0 (set ech=) if /i %err% equ 0 if /i "%arg%" equ "/j" ( call :jdate %ymd% set /a ech=!errorlevel! ) :end EndLocal&call set "%~1=%ech%"&exit /b %err% :Strlen Returns length of ssortingng in errorlevel setlocal&set "#=%*" if not defined # exit /b 0 set/a len=0 :loop set/a len+=1 set "#=!#:~1!"&if not defined # endlocal&exit/b %len% goto :loop :jdate SetLocal set "yyyymmdd=%~1" set "yyyy=%yyyymmdd:~0,4%" set "mm=%yyyymmdd:~4,2%" set "dd=%yyyymmdd:~6,2%" if %mm:~0,1% equ 0 set "mm=%mm:~1%" if %dd:~0,1% equ 0 set "dd=%dd:~1%" set /a Month1=(%mm%-14)/12 set /a Year1=%yyyy%+4800 set /a JDate=1461*(%Year1%+%Month1%)/4+367*(%mm%-2-12*%Month1%)^ /12-(3*((%Year1%+%Month1%+100)/100))/4+%dd%-32075 EndLocal&exit /b %JDate% :gdate SetLocal set /ap = %1 + 68569 set /aq = 4 * %p% / 146097 set /ar = %p% - ( 146097 * %q% +3 ) / 4 set /as = 4000 * ( %r% + 1 ) / 1461001 set /at = %r% - 1461 * %s% / 4 + 31 set /au = 80 * %t% / 2447 set /av = %u% / 11 set /a GYear = 100 * ( %q% - 49 ) + %s% + %v% set /a GMonth = %u% + 2 - 12 * %v% set /a GDay = %t% - 2447 * %u% / 80 if /i 1%GMonth% lss 20 set "GMonth=0%GMonth%" if /i 1%GDay% lss 20 set "GDay=0%GDay%" set "GDate=%GYear%%GMonth%%GDay%" EndLocal&exit /b %GDate% :Format_Verbose M/D/Y dayofweek to verbose date SetLocal&call set "dte=%%%~1%%" set "dow=%%%~2%%" set "st=" set "day=%dte:~3,2%" set "mon=%dte:~0,2%" set "year=%dte:~6,4%" set "ymd=%year%%mon%%day%" set "dy=%day:~1%" if %day:~0,1% equ 0 set "day=%day:~1%" if %mon:~0,1% equ 0 set "mon=%mon:~1%" set months=January February March April May June^ July August September October November December for /f "tokens=%mon%" %%a in ("%months%") do set "month=%%a" if /i %dy% equ 0 set "st=th" if /i %dy% gtr 3 set "st=th" if /i %day% geq 11 if /i %day% leq 13 set "st=th" if defined st goto :end set/a rst=%day% %% 10 for /f "tokens=%rst%" %%s in ("st nd rd") do set "st=%%s" :end set "dow=%dow%, %month% %day%%st%, %year%" EndLocal&call set %~1=%dow%&call set %~3=%month%&exit /b %ymd% :_GetSsortingng.cmd set p0=%0&set "p0=!p0:~1!" if not exist _GetSsortingng.cmd ( call :checkpath %p0% if !errorlevel! neq 0 ( set/p %~2="%~1" exit/b 0 ) ) call _GetSsortingng.cmd "%~1" %~2 %~3 exit/b %errorlevel% :checkpath if exist "%~$PATH:1" exit/b 0 exit/b 1 :RegDateFmt Format Separator ymd dte if "%~2"=="" exit/b 1 setlocal EnabledelayedExpansion set "Day="&set "Mon="&set "dte=" if not "%~6"=="" set "dte=!%~6!" if not defined dte set "dte=%date%" for /f "tokens=2 delims=:" %%A in ('date^nul&if !errorlevel! equ 0 set "Separator=%%A" ) if /i %Format:~0,1% gtr 9 set "Day=Day " for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('date^nul if /i "!errorlevel!" neq "0" set "Format=!Format:yy=yyyy!" if /i "!mm:~0,1!" gtr "9" ( set "Format=!Format:mm=Mon!" call :month_convert mm if /i "!errorlevel!" neq "0" endlocal&exit/b 1 ) ) ) endlocal&( call set "%~1=%Format%" call set "%~2=%Separator%" if not "%~3"=="" call set "%~3=%yy%" if not "%~4"=="" call set "%~4=%mm%" if not "%~5"=="" call set "%~5=%dd%" )&exit/b 0 :month_convert set "months=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec" call set "month=%%%~1%%" set/a mnum=0 for %%m in (%months%) do set/a mnum+=1&if /i %month% equ %%m call set "%~1=!mnum!"&exit /b 0 exit/b 1 :setRegDate dte format sep dow mon setlocal EnableDelayedExpansion if /i "%~5"=="" exit/b 1 set mon=!%~5!&set dow=!%~4!&set "dow=!dow:~0,3! " set sep=!%~3!&set "format=!%~2!"&set "dte=!%~1!" set yyyy=%dte:~0,4%&set yy=%dte:~2,2%&set mm=%dte:~4,2%&set "dd=%dte:~-2%" set "toks=2-4" echo %format%|find " ">nul if %errorlevel% equ 1 set "dow="& set "toks=1-3" for /f "tokens=%toks% delims=%sep% " %%a in ("%format%") do ( set "dte=%dow%!%%a!%sep%!%%b!%sep%!%%c!" ) endlocal&call set "%~1=%dte%"&exit/b 0 

Je l’ai trouvé dans http://forums.techguy.org/dos-other/837046-solved-date-format-bat-file.html

Je l’ai un peu retouché pour le diviser en 3 variables d’environnement.

L’inconvénient est qu’il doit interroger le registre, probablement pour connaître le jour, le mois et l’année de la commande.

 @Echo Off Set _Date=%date% If "%_Date%A" LSS "A" (Set _NumTok=1-3) Else (Set _NumTok=2-4) :: Default Delimiter of TAB and Space are used For /F "TOKENS=2*" %%A In ('REG QUERY "HKCU\Control Panel\International" /v iDate') Do Set _iDate=%%B For /F "TOKENS=2*" %%A In ('REG QUERY "HKCU\Control Panel\International" /v sDate') Do Set _sDate=%%B IF %_iDate%==0 For /F "TOKENS=%_NumTok% DELIMS=%_sDate% " %%B In ("%_Date%") Do Set _fdate=%%D%%B%%C IF %_iDate%==1 For /F "TOKENS=%_NumTok% DELIMS=%_sDate% " %%B In ("%_Date%") Do Set _fdate=%%D%%C%%B IF %_iDate%==2 For /F "TOKENS=%_NumTok% DELIMS=%_sDate% " %%B In ("%_Date%") Do Set _fdate=%%B%%C%%D Set _Month=%_fdate:~4,2% Set _Day=%_fdate:~6,2% Set _Year=%_fdate:~0,4% Echo _Year=%_Year% Echo _Month=%_Month% Echo _Day=%_Day% 

REG QUERY n’est pas suffisant si sShortDate a été défini sur quelque chose comme dd yy . Utilisez REG ADD :

 @echo off &setlocal for /f "tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate^|find "REG_SZ"') do set "ssShortDate=%%b" reg add "HKCU\Control Panel\International" /f /v sShortDate /d "dd MM yyyy" >nul set "cdate=%date%" reg add "HKCU\Control Panel\International" /f /v sShortDate /d "%ssShortDate%" >nul for /f "tokens=1-3" %%i in ("%cdate%") do set "day=0%%i"&set "month=0%%j"&set "year=%%k" set "day=%day:~-2%" set "month=%month:~-2%" echo.%day%.%month%.%year% endlocal 

J’ai une suggestion supplémentaire avec robocopy:

 @echo off &setlocal enabledelayedexpansion set "day=" for /f "tokens=3,4,8skip=4delims=: " %%i in ('robocopy') do if not defined day ( set "month=%%i" set "day=0%%j" set "year=%%k" ) set /a cnt=0 for %%i in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do ( set /a cnt+=1 if "%%i"=="%month%" set "month=0!cnt!" ) set "day=%day:~-2%" set "month=%month:~-2%" echo.%day%.%month%.%year% endlocal 

Vous trouverez ci-dessous une solution Batch pure qui utilise simplement la commande DATE et la variable% DATE%. Elle fonctionne donc sur toutes les versions de Windows. Pour rendre ce programme vraiment universel, ajoutez simplement le nom des parties jour et mois indiquées par la deuxième ligne de la commande DATE dans d’autres langues, entourées de barres obliques. Par exemple, supposons qu’en allemand la partie jour est affichée en tant que TT, il vous suffit donc de modifier cette valeur: set DayNames=/dd/tt/ afin d’utiliser également ce programme en allemand Windows (outre toutes les langues utiliser DD pour la partie jour).

 @echo off setlocal EnableDelayedExpansion rem GetStdDate.bat: Get date in standard format independently of Regional Settings rem Antonio Perez Ayala rem Set Day and Month names shown by second line of DATE command, enclosed in slashes (add any missing language): set DayNames=/dd/ set MonthNames=/mm/ rem Get date NAMES from second line of date COMMAND, enclosed in parentheses for /F "skip=1 tokens=2 delims=()" %%n in ('date ^< NUL') do ( rem Separate and store date names for /F "tokens=1-3 delims=/-.:" %%a in ("%%n") do ( set one=%%a& set two=%%b& set three=%%c rem Get date VALUES from %date% VARIABLE for /F "tokens=1-3 delims=/-.:" %%x in ("%date%") do ( rem Assign date values to date names set %%a=%%x& set %%b=%%y& set %%c=%%z ) ) ) rem Identify locale date format and assemble StdDate=YYYY/MM/DD if "!DayNames:/%one%/=!" neq "%DayNames%" ( rem Locale format is DD/MM/YYYY set StdDate=!%three%!/!%two%!/!%one%! ) else if "!MonthNames:/%one%/=!" neq "%MonthNames%" ( rem Locale format is MM/DD/YYYY set StdDate=!%three%!/!%one%!/!%two%! ) else ( rem Locale format is YYYY/MM/DD set StdDate=!%one%!/!%two%!/!%three%! ) echo Standard date: %StdDate% 

Cette fonction devrait fonctionner dans toutes les régions.

Remarques:

Renvoie le mois au format texte pour les régions MMM

 @echo off call :GetDateIntl year month day echo/Using GetDateIntl you get: %year%-%month%-%day% goto:eof ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :GetDateIntl yy mm dd [/A] :: Returns the current date on any machine with regional-independent settings :: Arguments: :: yy = variable name for the year output :: mm = variable name for the month output :: dd = variable name for the day output :: /A = OPTIONAL, removes leading 0 on days/months smaller than 10 (example: 01 becomes 1) :: Remarks: :: Will return month in text format in regions with MMM month :: SETLOCAL ENABLEEXTENSIONS if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4) for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do ( for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do ( set '%%a'=%%i set '%%b'=%%j set '%%c'=%%k ) ) if /I "%'yy'%"=="" set "'yy'=%'aa'%" if /I "%'yy'%"=="" ( set "'yy'=%'jj'%" & set "'dd'=%'tt'%" ) if %'yy'% LSS 100 set 'yy'=20%'yy'% endlocal&set %1=%'yy'%&set %4 %2=%'mm'%&set %4 %3=%'dd'%&goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 

Bonjour, vous pouvez utiliser le changement de chaîne pour faire ceci: echo% date: ~ 1,2% pour obtenir “01” et vous pouvez obtenir ce que vous voulez.