Append File Create date to File name

I have thousands of files in folders and i they all have the same prefix DSC00125.jpg what varies in the numerical part of the filename. (these are photographic files)

I would like to grab the create date of each file and append the YYYY-MM-DD- as a prefix to the
file, currently I am using the find and replace command.

I found it on another website, did some editing and here is the script.

Here is the script
tell application “Finder”
set theSelection to selection
repeat with thisFile in theSelection
set theName to name of thisFile
if not ((theName begins with “clip”) or (class of thisFile is folder)) then
get the creation date of thisFile
set convertedDate to result - 5
set name of thisFile to my dateString(convertedDate) & theName
end if
end repeat
end tell
on dateString(theDate)
set theYear to year of theDate
set theMonth to month of theDate as integer
if theMonth < 10 then set theMonth to “0” & theMonth
set theDay to day of theDate
if theDay < 10 then set theDay to “0” & theDay
set theTime to time string of theDate
return (theYear as text) & “-” & theMonth & “-” & theDay & “-”
end dateString

The script contained below works but I should add two notes and a caution:

  • The script only works on the files in the selected folder.

  • The script uses Finder and could be unacceptably slow with a large number of files. It’s easy to do a trial run to see if it works OK.

  • I tested this script on about a 100 files in a folder without issue. However, it’s important that you have a backup of the files before renaming them.


set fileExtensions to {"jpg", "jpeg"}

set pictureFolder to choose folder

tell application "Finder"
	set pictureFiles to every file in pictureFolder whose name extension is in fileExtensions
	repeat with aFile in pictureFiles
		set fileName to name of aFile
		set {year:y, month:m, day:d} to creation date of aFile
		set dateStamp to (y as text) & "-" & text -2 thru -1 of ("0" & (m as integer)) & "-" & ¬
			text -2 thru -1 of ("0" & d)
		set name of aFile to dateStamp & " - " & fileName
	end repeat
end tell

EDIT: After reading Yvan’s script, it occurred to me that it’s unnecessary to distinguish between “jpg” and “JPG”, and I modified my script accordingly.

Here I don’t use the Finder but ASObjC.

It’s supposed to be faster.
A choose folder dialog urge you to select one or several folders.
Every jpg or jpeg files embedded in these folders and their subfolders will be date stamped.

(*
https://macscripter.net/viewtopic.php?id=46773

addDateStampToJpegFiles

https://macscripter.net/viewtopic.php?id=46773

Based upon several scripts by Shane STANLEY

*)


use AppleScript version "2.4"
use framework "Foundation"
use scripting additions


on addDateStampToJpegFilesIn:folderPath
	set |⌘| to current application
	set theURL to |⌘|'s |NSURL|'s fileURLWithPath:folderPath
	set fileManager to |⌘|'s NSFileManager's defaultManager()
	set theOptions to (|⌘|'s NSDirectoryEnumerationSkipsPackageDescendants as integer) + (|⌘|'s NSDirectoryEnumerationSkipsHiddenFiles as integer)
	set theEnumerator to fileManager's enumeratorAtURL:theURL includingPropertiesForKeys:{} options:theOptions errorHandler:(missing value)
	repeat
		set aURL to theEnumerator's nextObject()
		
		if aURL is missing value then exit repeat -- missing value means there are no more log (aURL's |path|() as text)
		set theExtension to aURL's pathExtension()
		if ((theExtension as text) is in {"jpg", "jpeg"}) then
			set theFolderURL to aURL's URLByDeletingLastPathComponent()
			set PosixName to (aURL's lastPathComponent()) as text
			set {theResult, theDate} to aURL's getResourceValue:(reference) forKey:(current application's NSURLCreationDateKey) |error|:(missing value)
			set theFormatter to |⌘|'s NSDateFormatter's new()
			theFormatter's setDateFormat:"yyyy-MM-dd_"
			set theStamp to (theFormatter's stringFromDate:theDate) as text
			set newName to theStamp & PosixName
			set theDestURL to theFolderURL's URLByAppendingPathComponent:newName
			set fileManager to |⌘|'s NSFileManager's defaultManager()
			set {theResult, theError} to fileManager's moveItemAtURL:aURL toURL:theDestURL |error|:(reference)
		end if
	end repeat
end addDateStampToJpegFilesIn:


set theFolders to choose folder with prompt "Select folder(s) whose jpeg files must be date stamped" default location (path to desktop) with multiple selections allowed

repeat with aFolder in theFolders
	(my addDateStampToJpegFilesIn:(POSIX path of aFolder))
end repeat

Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) mercredi 13 mars 2019 12:09:38