Date From Filename

Summary: Sets the creation dates of the selected records based on their filenames.
Requires: EagleFiler
Install Location: ~/Library/Scripts/Applications/EagleFiler/
Last Modified: 2022-03-01

Description

This script looks for a date in the format 2015-05-13 in each record’s filename and uses it to set the record’s creation date. This is useful, for example, if you have old scanned documents and want to set their dates (for sorting or searching purposes) based on the date of the document rather than the date of the scan.

Installation Instructions · Download in Compiled Format · Download in Text Format

Script

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

tell application "EagleFiler"
    
set _records to selected records of browser window 1
    
repeat with _record in _records
        
set _date to my dateFromString(my dateStringFromFilename(_record's basename))
        
set _record's creation date to _date
    
end repeat
end tell

on dateStringFromFilename(_filename)
    
set _regex to my (NSRegularExpression's regularExpressionWithPattern:"\\d{4}(-\\d{2}){2}" options:0 |error|:(missing value))
    
set _nsString to my (NSString's stringWithString:_filename)
    
set _textCheckingResult to _regex's firstMatchInString:_nsString options:0 range:{0, _nsString's |length|()}
    
set _dateRange to _textCheckingResult's range()
    
set _dateString to _nsString's substringWithRange:_dateRange
    
return _dateString as Unicode text
end dateStringFromFilename

on dateFromString(_string)
    
set _sampleDate to "2015-03-12"
    
set _dateCharacters to characters 1 thru (length of _sampleDate) of _string
    
set AppleScript's text item delimiters to ""
    
set _dateString to _dateCharacters as string
    
set AppleScript's text item delimiters to "-"
    
set {_year, _month, _day} to text items of _dateString
    
return my makeDate(_year as integer, _month as integer, _day as integer)
end dateFromString

on makeDate(_year, _month, _day)
    
set _date to current date
    
set _date's year to _year
    
set _date's month to _month
    
set _date's day to _day
    
set _date's time to 0
    
return _date
end makeDate