Create a date and time stamp in your batch files

by Steve Wiseman on February 16, 2007 · 5 comments

in Windows

Here is an interesting one. I found a way to take the %date% environment variable, and turn it into a valid string for a filename – without any extra programs or scripts.

For the longest time I used a little utility I created to do this. The problem with that is the utility needs to be around if you want to send the batch file to someone.

What I didn’t know that was that you can use this character combination ‘:~’ to pull a substring out of an environment variable. That is when I realized you could use this to pull out parts of the current date (or time).

Here is how it works. Lets take the %date% variable and print it out

echo %date%

It comes back …At least today ;) .. with

Thu 02/15/2007

Not sure if the length of the day changes. It may be always the same. To be safe we can pull the year, month and day starting from the right.

The :~ substring command works like this:

:~[START POS],[LENGTH]

If [START_POS] is positive or zero the substring will start from the left. If the number [START_POS] is negative it will start from the right. And [LENGTH] is the number of characters in the opposite direction of the starting point.

I know this might be confusing at first, but you will see what I am talking about.

If we wanted to get the current year we could start 4 from the end, and 4 in length. Like this:

echo %date:~-4,4%

For the month we start 7 from the right (Length of Year + Length of Month + 1 Slash)

echo %date:~-7,2%

For the day we start 10 from the right (Length of Year + Length of Month + Length Of Day + 2 Slashes)

echo %date:~-10,2%

Bringing it all together. Lets say I zipped up a folder every night for archival purposes, and wanted a different filename for each day (Not sure if this pkzip syntax is correct, but that is not important for our discussion here)

pkzip c:\ImportantFolder\*.* c:\TempZip.zip
ren C:\TempZip.Zip c:\TempZip_%date:~-4,4%%date:~-7,2%%date:~-10,2%.zip

Which renames our C:\TempZip.Zip to C:\TempZip_20070215.zip

Perfect. I get a date stamped file, and no special vbscript, or command line program is needed.

The same method could be used for the current time

I am still amazed this little trick works.

Like this article? Then sign up for my newsletter to get free tips and software sent right to your inbox once a week. Like you, I hate spam – I will never spam, or sell your email address.

Related Articles

{ 5 comments… read them below or add one }

John October 14, 2009 at 1:43 pm

Great!!
Working Fine……..

Sue November 9, 2009 at 4:01 pm

what if I need to do both date and time?

Angus Scott-Fleming November 11, 2009 at 4:59 am

Try this code:
For /F “Tokens=2″ %%I in (‘Date /T’) Do Set dd=%%I
For /F “Tokens=*” %%I in (‘Time /T’) Do Set tt=%%I
echo %dd% %tt%
set tt=
set dd=

If you need batch-code to set short date and time env.vars for file naming, here’s the output of a longish batch file I wrote:

D:\Data\Downloads> getdat2k SHOW

date=Tue 11/10/2009
day=10 month=11 year=2009 yy=09
mdy=11/10/2009 cymd=20091110 ymd=091110
MMM=Nov week=2 dow=Tue
time=21:58:41.37 hour=21 min=58 sec=41 sech=41.37

I’ve uploaded a copy of it to the files area of my geoapps.com website, you’re welcome to grab it.

admin November 11, 2009 at 12:54 pm

Fantastic work. Thanks for posting your script.

Terry December 11, 2009 at 9:01 pm

How about if I want to subtract an hour from the time?

As in the file is run on an EST system, but the file needs to show CST.

Leave a Comment

Previous post:

Next post: