How-to: Rename a file with the DATE/Time - StampMe.cmd

Rename a file (or folder) by appending the current date and time to the existing filename:

  @ECHO off
  IF [%1] NEQ [] goto s_start

  Echo StampMe.cmd
  Echo Rename a file with the DATE/Time
  Echo Syntax
  Echo    STAMPME TestFile.txt
  Echo    STAMPME "Test File.txt"
  Echo    STAMPME "c:\docs\Test File.txt"
  Echo    Will rename the file in the format "Test File-2014-12-30@16-55-01.txt"
  Echo    In a batch file use CALL STAMPME ...
  GOTO :eof
  Set _file=%~n1%
  Set _pathname=%~f1%
  Set _ext=%~x1%

  For /f "tokens=1-6 delims=/: " %%a in ('robocopy "|" . /njh ^| find ":"') do (
    set "_YYYY=%%a" & set "_month=%%b" & set "_day=%%c" 
    set "_hour=%%d" & set "_min=%%e"   & set "_sec=%%f"

  Echo %_YYYY%-%_month%-%_day%@%_hour%:%_min%:%_sec%
  :: Save the date/time in ISO 8601 format:
  Set _datetimestamp=%_YYYY%-%_month%-%_day%@%_hour%-%_min%-%_sec%

  :: Rename the file
  REN "%_pathname%" "%_file%-%_datetimestamp%%_ext%"

The last line of the batch file does the REName. Based on the lengthy forum threads here and here.

If you save this as a batch script (stampme.cmd) on the desktop, you can drag and drop any file, from a local drive or UNC path, and drop it onto the icon - that will rename the file without moving it from the original location.


c:\> StampMe "sample file.txt"
c:\> StampMe "C:\logs\data\errorlog.txt"
c:\> StampMe "C:\docs\example folder"

An alternative 'quick and dirty' way to do the same thing in one line is shown below, this does work but is less robust as the results will vary according to regional/control panel settings.

c:\> REN "sample file.txt" "* %Date:/= % %Time::=.%.*"

“The time you enjoy wasting is not wasted time” ~ Bertrand Russell

Related commands

Standard date and time notation - YYYY-MM-DD.
How-to: DelOlder.cmd - Delete files more than n days old.
How-to: GetDate and GetTime scripts.
How-to: Stampme.ps1 - Rename files with PowerShell.

Copyright © 1999-2023
Some rights reserved