Rename a file (or folder) by appending the current date and time to the existing filename:
@ECHO off
SETLOCAL
IF [%1] NEQ [] goto s_start
:: Author - Simon Sheppard, Nov 2012
:: Tested for Windows XP, Windows 2008
Echo StampMe.cmd
Echo Rename a file with the DATE/Time
Echo:
Echo Syntax
Echo STAMPME TestFile.txt
Echo:
Echo STAMPME "Test File.txt"
Echo:
Echo STAMPME "c:\docs\Test File.txt"
Echo:
Echo Will rename the file in the format "Test File-2009-12-30@16-55.txt"
Echo:
Echo In a batch file use CALL STAMPME ...
GOTO :eof
:s_start
Set _file=%~n1%
Set _pathname=%~f1%
Set _ext=%~x1%
::Get the date
For /f "tokens=1-4 delims=/-. " %%G in ('Date /t') Do (Call :s_fixdate %%G %%H %%I %%J)
Goto :s_time
:s_fixdate
Set _yr=%1
if "%_yr:~0,1%" GTR "9" Shift
For /f "skip=1 tokens=2-4 delims=(-)" %%G in ('Echo.^|Date') Do (
Set %%G=%1&Set %%H=%2&Set %%I=%3)
goto :eof
:s_time
:: Get the time
For /f "tokens=1-3 delims=1234567890 " %%a in ("%time%") Do Set "delims=%%a%%b%%c"
For /f "tokens=1-4 delims=%delims%" %%G in ("%time%") Do (
Set _hh=%%G
Set _min=%%H
Set _ss=%%I
Set _ms=%%J
)
:: Strip any leading spaces
Set _hh=%_hh: =%
:: Ensure the hours have a leading zero
if 1%_hh% LSS 20 Set _hh=0%_hh%
Echo Year-Month-Day@Hour-Min-Sec
Echo %yy%-%mm%-%dd% @ %_hh%-%_min%-%_ss%
REN "%_pathname%" "%_file%-%yy%-%mm%-%dd%@%_hh%-%_min%-%_ss%%_ext%"
The last line of the script does the REName.
Examples
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
DelOlder.cmd - Delete files more than n days old
GetDate and GetTime scripts
Standard date and time notation - YYYY-MM-DD
Stampme.ps1 - Powershell version
© Copyright SS64.com 1999-2013
Some rights reserved