Rename files to the file date

knightEknight
CERTIFIED EXPERT
Published:
Updated:
This Windows batch file is useful for organizing image files from a digital camera or other source, but can have many other uses.  It simply renames the file(s) to match their create date.  For example, if you took a picture today at 1:40pm and the image file is called IMG_0777.jpg, this utility will rename the file to 20081121_134000.jpg.  Works with multiple files, and will recurse sub-directories with the /s option.

Cut-n-paste the following into notepad and save it as a .BAT file:
 
@echo off
                       setlocal enabledelayedexpansion
                       
                       set filespec=%*
                       if "%filespec%"=="" goto :help
                       
                       for /f "delims=" %%F in ('dir/a-d/b/od %filespec%') do (
                         set fn=%%~tF
                       
                         set/a hour=0x!fn:~11,2!
                         if !hour! GTR 10 set/a hour=(!hour!-6^) %% 12
                         if "!fn:~17,2!"=="PM" set/a hour+=12
                         if !hour! LSS 10 set hour=0!hour!
                       
                         set root=%%~dpF
                         set ext=%%~xF
                         set nxt=00
                         set fn=!fn:~6,4!!fn:~0,2!!fn:~3,2!_!hour!!fn:~14,2!
                       
                         if exist "!root!!fn!!nxt!!ext!" for /L %%I in (59,-1,1) do (
                           set dup=0%%I
                           if not exist "!root!!fn!!dup:~-2!!ext!" set nxt=!dup:~-2!
                         )
                       
                         @echo ren "%%F" "!fn!!nxt!!ext!"
                               ren "%%F" "!fn!!nxt!!ext!"
                       )
                       
                       dir !root!*!ext! | find/v "Volume"
                       
                       goto :end
                       
                      :help
                       
                      @echo.
                      @echo  Renames files to the date and time the file was created, 
                      @echo  preserving the file extention:  YYYYMMDD_HHMMSS.ext
                      @echo  Synatx:  %0 filespec [/s]
                      @echo  A filespec (such as *.jpg) must be specified.
                      @echo  /s will recurse sub-folders and rename files matching the filespec.
                      @echo  Example:  %0  E:\DCIM\*.jpg  /s
                       
                      :end
                       endlocal
                      

Open in new window

3
5,397 Views
knightEknight
CERTIFIED EXPERT

Comments (4)

CERTIFIED EXPERT

Author

Commented:
Note: the above script assumes a U.S. date format.  With modification it can be made to work with other date formats as well.
CERTIFIED EXPERT

Author

Commented:
Forgot to mention in the article that the script takes the target filespec as a parameter, so:

 scriptname.bat  F:\DCIM\100\*.jpg
CERTIFIED EXPERT

Author

Commented:
Wow, it sure would be nice to be able to edit comments in articles the way we can in questions.

My previous comment is in error - the parameter must be the filespec only, not the path, so:

  cd/d  F:\DCIM\100
  scriptname.bat .jpg
CERTIFIED EXPERT

Author

Commented:
DOH!    *.jpg

Have a question about something in this article? You can receive help directly from the article author. Sign up for a free trial to get started.