Command Line Timestamp

I often write little batch scripts, sometimes just as a way to save a lengthy command line.  Frequently I also want to output the result to a file and give it a unique (and meaningful) filename.  However the built-in %date% and %time% variables expand to the unuseful "Fri 01/04/2008" and "15:35:51.14" which are difficult (or impossible) to use in a NTFS filename.  %random% is always an option, but a timestamp is always preferred.

I found an option in the SET command syntax which allowed me to create the following example.

 @echo off
echo year: %date:~-4%
echo mon : %date:~4,2%
echo day : %date:~7,2%
echo hour: %time:~0,2%
echo min : %time:~3,2%
echo sec : %time:~6,2%
echo.

set datecode=%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%
echo %datecode%

Running this produces the following output.

 year: 2008
mon : 01
day : 04
hour: 16
min : 09
sec : 09

20080104_160909

It works on Windows Server 2003 and Windows Vista, however I don't know if non-default regional settings change the behavior of these variables.

Disclaimer: The information on this site is provided "AS IS" with no warranties, confers no rights, and is not supported by the authors or Microsoft Corporation. Use of included script samples are subject to the terms specified in the Terms of Use .

Comments

  • Anonymous
    January 01, 2003
    Rar76 - can you provide more detail where %date:~3,2% is more accurate?  %date:~4,2% returns the month value on every system I have, whereas %date:~3,2% returns a space and the first digit of the month. Now this is much powerful and easier in PowerShell: get-date -format MM. go.microsoft.com/fwlink has the available formatting option.

  • Anonymous
    October 28, 2011
    echo mon : %date:~4,2% is incorrect. echo mon : %date:~3,2% is correct.

  • Anonymous
    March 08, 2012
    Thanks!

  • Anonymous
    November 14, 2012
    The comment has been removed