Windows Batch File (.bat) to get current date in MMDDYYYY format.
This is a recipe I discovered while working on a few old skool dos batch files. This is a quick .bat file to create a folder based on the current date however, this sets it up in the MMDDYYYY format. Useful for those .bat scripters who need to use the current date variable in such a format.
Just copy and paste the text in quotes to a text file. Then rename file test.bat and run from command line to see (echo is on by default).
This can be used in a very powerful way, the FOR command can be reused and changed to query to see if a file exists and then if so create the folder, etc.
for now, lets start basic…
- echo on
@REM Seamonkey’s quick date batch (MMDDYYYY format)
@REM Setups %date variable
@REM First parses month, day, and year into mm , dd, yyyy formats and then combines to be MMDDYYYY
FOR /F “TOKENS=1* DELIMS= ” %%A IN (‘DATE/T’) DO SET CDATE=%%B
FOR /F “TOKENS=1,2 eol=/ DELIMS=/ ” %%A IN (‘DATE/T’) DO SET mm=%%B
FOR /F “TOKENS=1,2 DELIMS=/ eol=/” %%A IN (‘echo %CDATE%’) DO SET dd=%%B
FOR /F “TOKENS=2,3 DELIMS=/ ” %%A IN (‘echo %CDATE%’) DO SET yyyy=%%B
SET date=%mm%%dd%%yyyy%
this does nothing but setup the %date variable to be todays date in MMDDYYYY format so it can be called later in the script, etc..
peace
seamonkey420








pbv kumar said on October 3, 2008
it works fantastic bu tmy problem is in format i want the date should be form 1 to 9 will be 01 ,02,03 & 09 like . kindly giv eme the solutions
Anonymous said on October 23, 2008
The 2nd line should have: echo %CDATE%
instead of: DATE/T
hi said on December 11, 2008
this does not work
XJ Moonen said on December 29, 2008
Perhaps you should try this
:: script for datestring in yyyymmdd format
:: XJ Moonen Netherlands
for /f “tokens=1,2″ %%u in (‘date /t’) do set d=%%v
for /f “tokens=1″ %%u in (‘time /t’) do set t=%%u
if “%t:~1,1%”==”:” set t=0%t%
set datestr=%d:~6,4%%d:~3,2%%d:~0,2%
set y=%d:~6,4%
set m=%d:~3,2%
set d=%d:~0,2%
:: test if month
Ryan said on January 27, 2009
why not just do this:
set mydate=%date:~4,2%%date:~7,2%%date:~10,4%
Rakesh Bhangre said on February 6, 2009
like my file in E drive – 06022009.DMP so how can copy this file in CD Drive using Batch file. my batch file is :-
@echo off
cls
echo Copying started at %date% %time%
xcopy “E:%date%.DMP” “C:Documents and SettingsHp1Local SettingsApplication DataMicrosoftCD BurningBACKUP*.*” /s /e /h /c /d /i /y
xcopy “C:Documents and SettingsHp1Local SettingsApplication DataMicrosoftCD BurningBACKUP*.*” “G:BACKUP*.*”
PAUSE
explorer g:
Hersch said on February 7, 2009
Ryan, I love it, it is great one line no trickery with files etc. I expanded it further my requirements.
echo Get the current date and time in YYYY-MM-DD-HH-MM-SS format
SET isodt=%date:~10,4%-%date:~7,2%-%date:~4,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
echo %isodt%
Thanks a million
Marcus said on February 18, 2009
Perfect, exactly what i wanted, thanks for saving me 2 hours !
rvsdi said on February 25, 2009
how to save file with filename+current date
ex : myfile20090210
leif said on February 27, 2009
not the best at this yet dont even realy know what half what i posted mean but i just got it working with the Filename_”%PDATE%”. if you dont want a gap inbetween file and date do Filename”%PDATE%”. hope it helps.
FOR /F “TOKENS=1,2 DELIMS=/ ” %%A IN (‘DATE /T’) DO SET mm=%%B
FOR /F “TOKENS=2,3 DELIMS=/ ” %%A IN (‘DATE /T’) DO SET dd=%%B
FOR /F “TOKENS=3* DELIMS=/ ” %%A IN (‘DATE /T’) DO SET yyyy=%%B
set /A dd=%dd%
set Pdate=%yyyy%_%mm%_%dd%
echo %Pdate%
mkdir C:MYFILE_”%PDATE%”
mike said on March 19, 2009
genius!, simple, elegant! thanks!
Some User said on April 17, 2009
For programmers in the USA, use THIS script instead, otherwise it won’t work with the standard Windows US MM/DD/YYYY format.
@Echo Off
Set YYYY-MM-DD=%DATE:~6,4%-%DATE:~0,2%-%DATE:~3,2%
Chris Felpel said on April 21, 2009
Many thanks. I started to write my own then quickly remembered writing bat files requires a fine mix of science and art with a dash of experence.
Fuad said on April 25, 2009
Okey
that helps
James Lubuag said on April 25, 2009
how can i combine the date and time to create a file name. please advise
echo %date:~10,4%%date:~7,2%%date:~4,2%
ren d:templog.pdf Survey%date:~10,4%%date:~7,2%%date:~4,2%.pdf
pause
for /f “tokens=1-5 delims=:” %%d in (“%time%”) do rename “hope.pdf” %%d-%%e.pdf
pause
FP said on May 19, 2009
Or you can use %date% and parse it later in your script.
Rarsa said on May 26, 2009
I had been using a method similar to yours but recently I found one that is even simpler:
The %DATE% AND %TIME% variables contain the formated date and time so you an just extract the substrings using regular variable syntax
set _DATETIME=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
In my case
%DATE% contains “Tue 05/26/2009″
so %DATE:~10,4% means to extract a substring 4 characters long starting from character 10
If you weren’t aware of that way of handling substrings for any variables, now you know.
If you have a different default date format than mine you will have to adapt the parameters
Trent Nelson said on May 28, 2009
Here’s what I use. It queries the registry first to figure out what format the date is going to be returned in. It currently supports UK and US locales (as that’s all I need to support at the moment). Trivial to extend it to support others.
@echo off
goto test
:get_date_yyyymmdd
setlocal enableextensions enabledelayedexpansion
set _RV=
set _ERR=0
set _CMD=reg query “HKCUControl PanelInternational” /v sShortDate
for /f “usebackq skip=2 tokens=3,* delims= ” %%i in (`%_CMD%`) do (
rem Amsterdam/Houston servers:
rem Short date format (%%i): M/d/yyyy
rem Sample %DATE%: Thu 05/29/2009
rem London servers:
rem Short date format (%%i): dd/MM/yyyy
rem Sample %DATE%: 29/05/2009
set D=!DATE!
echo i: %%i
echo D: !D!
if “%%i”==”M/d/yyyy” (
rem I’m assuming the day abbreviation will always be three chars
rem (so we account for four in total, including the space). So
rem far, I can attest that this is definitely the case on Wed &
rem Thu ;-)
set yyyy=!D:~-4!
set mm=!D:~-10,-8!
set dd=!D:~-7,-5!
) else if “%%i”==”dd/MM/yyyy” (
set yyyy=!D:~-4!
set mm=!D:~-7,-5!
set dd=!D:~-10,-8!
) else (
echo fatal: I don’t understand this system’s date format (%%i^)
set _ERR=1
)
)
set _RETVAL=!yyyy!!mm!!dd!
endlocal & set _YYYYMMDD=%_RETVAL% & set _ERROR=%_ERR%
exit /b %_ERROR%
:test
call :get_date_yyyymmdd
echo formatted date: %_YYYYMMDD%
dan said on June 4, 2009
Thanks guys… I really didn’t have time to figure this out myself
I was going to recreate xset32 for win64 in c++ or PERL, but this is much easier.
Ben Personick said on July 10, 2009
Erms, that IS pretty old school, try:
Set TDate=%date:~10,4%%date:~4,2%%date:~7,2%
1 line = better
=D
PS. Also it’s bad form to use a variable with the same name as a command, so, don’t do that. =P
Peace,
-B
Anonymous said on August 6, 2009
Thanks Trent that is what I want: getting day month and year INDEPENDANT of the format used. I am going to study this.
Anonymous said on August 7, 2009
May this is usefull, especially since it is an example how to get all kinds of everything INDEPENDENT of the current language locale and date format settings using the Windows Scripting Host
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: This uses Windows Scripting Host to set variables
:: to the current date/time/day/day_number
:: for Win9x/ME/NT/W2K/XP etc
:: Thanks go to Todd Vargo for his scripting
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
set TmpFile=”%temp%.tmp.vbs”
echo> %TmpFile% n=Now
echo>>%TmpFile% With WScript
echo>>%TmpFile% .Echo “set year=” + CStr(Year(n))
echo>>%TmpFile% .Echo “set yr=” + Right(Year(n),2)
echo>>%TmpFile% .Echo “set month=”+ Right(100+Month(n),2)
echo>>%TmpFile% .Echo “set day=” + Right(100+Day(n),2)
echo>>%TmpFile% .Echo “set hour=” + Right(100+Hour(n),2)
echo>>%TmpFile% .Echo “set min=” + Right(100+Minute(n),2)
echo>>%TmpFile% .Echo “set sec=” + Right(100+Second(n),2)
echo>>%TmpFile% .Echo “set dow=” + WeekDayName(Weekday(n),1)
echo>>%TmpFile% .Echo “set dow2=” + WeekDayName(Weekday(n))
echo>>%TmpFile% .Echo “set iso=” + CStr(1 + Int(n-2) mod 7)
echo>>%TmpFile% .Echo “set iso2=” + CStr(Weekday(n,2))
echo>>%TmpFile% End With
cscript //nologo “%temp%.tmp.vbs” > “%temp%.tmp.bat”
call “%temp%.tmp.bat”
del “%temp%.tmp.bat”
del %TmpFile%
set TmpFile=
set stamp=%year%-%month%-%day%_%hour%.%min%.%sec%
echo The year (YYyy) is “%year%”
echo The year (yy) is “%yr%”
echo The month is “%month%”
echo The day (%dow%) is “%day%”
echo The full weekday name is “%dow2%”
echo.
echo ISO 8601 Day-Of-Week number is “%iso%”
echo.
echo The hour is “%hour%”
echo The minute is “%min%”
echo The second is “%sec%”
echo.
echo The date and time stamp is “%stamp%”
echo.
echo time (hhmmss) (%hour%%min%%sec%)
echo.
echo date A (yyyymmdd) (%year%%month%%day%)
echo date B (mmddyyyy) (%month%%day%%year%)
echo date C (ddmmyyyy) (%day%%month%%year%)
echo.
echo date D [yymmdd] [%yr%%month%%day%]
echo date E [mmddyy] [%month%%day%%yr%]
echo date F [ddmmyy] [%day%%month%%yr%]
:: datetime.bat
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Anonymous said on August 13, 2009
I have read though all of these posts and still can’t seem to figure out how to make a directory (folder) with the current date in the following format 09_08_13 (yy_mm_dd). Can anyone help me with this?
Anonymous said on August 24, 2009
The solution using VB script is awesome.
Eventually, extracting date is independent of regional setting on each particular computer.
Thank you, marcwentink.
ASh said on August 26, 2009
how can I create a file.txt containing the name of a file with the date of yesterday?
for example:
I have to create a file named:
script_ftp.txt -> within this file must be:
get TCFILE720/TCCFASIE.F(dated yesterday) S: files TCCFASIE.F(dated yesterday)
how can I create a file.txt containing the name of a file with the date of yesterday?
for example:
I have to create a file named:
script_ftp.txt -> within this file must be:
get TCFILE720/TCCFASIE.F20090825 S: files TCCFASIE.F20090825.dat
Anonymous said on August 28, 2009
Thank you seamonkey420,
This is just what I was looking for.
~Bill
David Thomas said on August 30, 2009
one liner (YYYYMMDD): %date:~10,4%%date:~4,2%%date:~7,2%
output: 20090830
Anonymous said on September 8, 2009
THANKS I GOT MY SOLUTION FROM THIS SITE, THANKS RYAN
Chris Hackett said on October 6, 2009
Thanks, this is exactly what I was looking for!
Willaim Shaffer said on November 24, 2009
I was able to use your format and add 2 more lines for the time to get a needed stamp
FOR /F “TOKENS=1* DELIMS= ” %%A IN (‘TIME/T’) DO SET CTIME=%%B
For /f “tokens=1-4 delims=: ” %%a in (‘time /t’) do (set time=%%a%%b%%c)
Thanks for the help!
anon said on December 1, 2009
Brilliant Marc. Hopefully that will be useful with multiple users across Europe.
Anonymous said on December 1, 2009
Brilliantly searched on internet :) mostly
I did not invent that all for myself.
Marc Wentink
Anonymous said on December 11, 2009
You should have tried 1-3 in Tokens……!!!!!!!! or try out this……….
for /f “tokens=1,2,3 delims=/ ” %%a in (‘DATE /T’) do set date=%%c-%%b-%%a
I know I am too late to reply but it might help someone else in need……..
Anonymous said on December 29, 2009
whats help i am trying to change the existing date in a txt file to the current system date……. can anyone help the date is located in line no 36 how to replace it
Anonymous said on December 30, 2009
I trird your batch file then I added a few modifications to accomodate my backup goal. Nice work, excellent contribution!
-Tsubasa
Anonymous said on January 12, 2010
here it is with one line
for /f “tokens=1,2,3,4 delims=/ ” %i in (‘DATE /T’) do set mydate=%j%k%l
it will set mydate as
Date /T
Tue 01/12/2010
set mydate=01122010
Anonymous said on January 15, 2010
can you please send the complete code which will execute in xp to cahnge the date format from m/d/yyyy to dd-mmm-yyyy respectively to my mail id ” shaik.hassan.b@gmail.com“
Anonymous said on January 15, 2010
can you please send the complete code which will execute in xp to cahnge the date format from m/d/yyyy to dd-mmm-yyyy respectively to my mail id ” shaik.hassan.b@gmail.com“
Anonymous said on January 15, 2010
i just want to change the date format from m/d/yyyy to dd-mmm-yyyy and respectively please email me to shaik.hassan.b@gmail.com
Ketan Patel said on January 20, 2010
This is awesome and simple. Great stuff. Thanks a lot.
TooMuchCoffeeMan said on February 10, 2010
And now for something completely similar:
For /F “Tokens=1-8 Delims=.:/ ” %%a In (‘Echo %Date% %Time%’) Do (Set TimeStamp=%%d-%%b-%%c %%e:%%f:%%g)
My brain hurts!
Name said on March 15, 2010
Thanks!
Eric said on March 15, 2010
use “tokens=2,3,4″ to get the year instead of the day of week
Anonymous said on May 4, 2010
This works great!! I just need to make it do YYYMMDD
vtdlbm said on May 14, 2010
this is for european time format (date /t => dd.mm.yyyy)
for /f “tokens=1-3 delims=.” %i in (‘date/t’) do set dd=%i & set mm=%j & set yyyy=%k
tim m said on May 31, 2010
I have a need to run this on different computers where the Windows short date format (depending on OS it’s set by Regional Settings applet in Control Panel) can vary depending on user’s (developers) tastes. Parsing is doable if, and only if, they are all using the same short date format which %date% also uses. I am afraid there is no solution to my situation except coding a batch file for each format – and if the user changes the format, they’re screwed. Even if a solution exists, it’s going to involve an ugly convoluted process of ascertaining the date format first and then parsing. Why did MS not also steal the %Y %M and %d env vars from unix when they ripped it off for DOS?!!!
pbv kumar said on June 4, 2010
can any one help me out how can i use month as JAN, FEB , and when month end how can i pick my month as previous one, i mean current month-previousmonth.for e.g 0n 01 Jun 10 i should get 31 May 10
ee said on June 7, 2010
my batch looks like this
COPY “c:test.txt” “f:backup%date:~11,6%.%date:~7,2%.%date:~3,2% test.txt”
Startingoftheweek said on June 14, 2010
thanks a lot Ryan..
raj…
Anonymous said on June 18, 2010
This was spot-on, I was using US timezone and no script was working. Finally, your script did the trick. Thanx a billion :)
MeaCulpa said on July 21, 2010
Why not use the built-in string tailoring operators?
for mmmmddyy:
echo %DATE:~5,2%%DATE:~8,2%%DATE:~0,4%
Sunilthomask said on July 27, 2010
Nice Thanks M8
Anonymous said on August 5, 2010
Thanks, that’s exactly what I was looking for! I was pissed at the DD-MM-YYYY that barged in every time I was creating a a folder based on the current date. I couldn’t find the windows exe files to solve this and I wasn’t used to seeing that, I think I never will. Great job, I managed to do what you did.
Abc said on August 9, 2010
its not working..
Patrick Ru said on August 20, 2010
echo %date:~4,10%
echo %date:-=%
echo %date:/=%
echo %date:/=-%
Patrick Ru said on August 20, 2010
set d=%date:-=%
echo %d:~4,8%
Imran Ikram said on December 24, 2010
well i have 1 question for all of you. i made a backup of my dump file with date and time. there is also command to then zip the same file in winzip format. winzip does not allow me to do that as when it starts zipping , the time has changed. forexample when my dmp file backup completes like imran 2010-24-10-12-20-12, and starts zip the time changes for a min or so. how to stop time when backup start so winzip completes its operation and backup the dmp file.
command is
Get the current date and time in YYYY-MM-DD-HH-MM-SS format
echo %isodt%
SET isodt=%date:~10,4%-%date:~7,2%-%date:~4,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
exp file=e:db%isodt% .dmp
c:
cd
IF NOT EXIST C:PROGRA~1WINZIP GOTO END
cd c:program fileswinzip
winzip32 -min -a -s e:db%isodt% .ZIP
e:db%isodt% .dmp
IF NOT EXIST e:db%isodt% .ZIP GOTO END
:END
thanks in advance
Gargoba Honz said on January 17, 2011
jasonwhaley is absolutely right – instead of fiddling around here programmers should have killed mr. gates a long tie ago for this totally braindead implementation of such a basic thing like getting a date format working on every computer on the planet. extremely stupid!
Zulf said on January 20, 2011
The simple answer for converting from DD/MM/YYYY to a more script friendly version DD-MM-YYYY is:
%date:~0,2%-%date:~3,2%-%date:~6,10%
thats it, simple, use it to say save a log file, example:
c:logs%date:~0,2%-%date:~3,2%-%date:~6,10%.log
Webstuff said on January 27, 2011
echo %date:~-4,4%%date:~-7,2%%date:~0,2%
Does the job in YYYYMMDD format in one line
Atsuine said on February 1, 2011
need some help, i need a DOS script that will return previous date but only weekdays. i.e say Monday is 2011-01-31 and the script will return 2011-01-28, all help appreciated.
Alan
Bruce Lee said on February 2, 2011
This was a life-saver. Thank you.
Fixit said on February 9, 2011
The DAY doesn’t show up. Just the Year, Month, and day of week.
Parthiv Raval said on February 9, 2011
This one is the best solution..thanks to marcwentink
Mihai Mandis said on March 8, 2011
There’re diferent data format given by “echo %date%_%time%” command.
1. 03/08/2011_12:05:31.12
2. Thu 03/03/2011_07:38 PM
3. 2011-03-08_12:05:31.12
It might be quite difficult to get the date and time by parsing a string given by “echo %date%_%time%” command.
I’ve choosen to use “realdate.com” executable to get data and time: http://www.huweb.hu/maques/realdate.htm
Frankyke said on March 14, 2011
Hi all, how to take out the “0″ in month?
Example:
The date is 11/02/2011. If it is 02, I may just want single digit “2″ instead of “02″. If it is 12 then may keep both digits “12″.
thanks all.
Dv400b said on March 15, 2011
Sounds like your date format is in “Day Month/Date/Year” format, in which case you want
%date:~-4,4%%date:~-10,2%%date:~-7,2%
Kouliscon said on March 16, 2011
Hello all,
i am usign with GPO a batch file at logon and logoff of the computers which copies a specific location to a network location for backup reasons.
The data has become big and i need to add to the batch file ONLY the files which were CREATED the last 90 days.
anybody can help?
the batch file command is:
c:
c:users%username%DATA
xcopy *.* /s /r /e /d /h /y /exclude:\192.168.1.10nonbackupfiles.txt \192.168.1.10%username%
thx in advance
AMan said on March 16, 2011
Perfect, exactly what I was looking for!
Stephen Jung said on March 22, 2011
Can you also get the quarter?
Venkat Lvr said on April 4, 2011
can you please send the complete code which will execute in xp to show date format from dd-mm-yyy to dd-mmm-yyyy respectively to my mail id ” venkat.lvr@gmail.com”
Eg: 01-04-2011 to 01-Apr-2011.
Idris_tas said on June 24, 2011
thanks
jymurthy said on December 7, 2011
How can I print previous day’s date
minipop4747 said on December 16, 2011
I want to get 2 days back days in YYYYMMDDHHMM format to create a batch file(need cmd command).
as an example today is : 201112161200 and i want to get 2 days back date as below 201112141200
ECHO %date:~10,4%%date:~7,2%%date:~4,2%%time:~0,2%%time:~3,2%
Mention command gives the current date in above format 201112161200.
But i need to get 2 days back date from the mention format
if any one knows how to do this please help me