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%

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


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 (4)

  1. 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. has the available formatting option.

  2. rar76 says:

    echo mon : %date:~4,2% is incorrect.

    echo mon : %date:~3,2% is correct.

  3. Admir says:


  4. Ms Script adapted to Europa Date Format says:

    Thanks for your Ticket about "Command Line Timestamp "

    In Europa, with different date conventions, I had to adapt your script

    echo Date : %date%

    echo year: %date:~-4%

    echo mon : %date:~-7,2%

    echo day : %date:~0,2%


    echo hour: %time:~0,2%

    echo min : %time:~3,2%

    echo sec : %time:~6,2%


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

    @echo %datecode%

    REN "Testfile.*" "%datecode%_Testfile.*"

Skip to main content