Rename for Dropbox/Windows

Summary: Changes filenames for better interoperability with Dropbox and Windows.
Requires: EagleFiler
Install Location: ~/Library/Scripts/Applications/EagleFiler/
Last Modified: 2022-09-07

Description

This script changes the filenames of the selected records to replace characters that are invalid on Windows with spaces and hyphens. See also the user-contributed script and smart folder in the forum.

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

Script

tell application "EagleFiler"
    set _records to selected records of browser window 1
    repeat with _record in _records
        set _record's filename to my processName(_record's filename)
        set _record's basename to my processBaseName(_record's basename)
    end repeat
end tell

on processName(_name)
    set _invalidChars to "<>/\\|:"
    repeat with _c in _invalidChars
        set _name to my replace(_name, _c, "-")
    end repeat
    set _cr to ASCII character 13
    set _lf to ASCII character 10
    set _invalidChars to "\"?*" & _cr & _lf
    repeat with _c in _invalidChars
        set _name to my replace(_name, _c, " ")
    end repeat
    set _name to my replace(_name, "↔", "<-->") -- left right arrow Unicode 034D
    set _name to my replace(_name, "↔", "<->")
    set _name to my replace(_name, "➝", "-->") -- rightwards arrow Unicode 2192
    set _name to my replace(_name, "➝", "->")
    set _name to my replace(_name, "←", "<--") -- leftwards arrow Unicode 2190
    set _name to my replace(_name, "←", "<-")
    set _name to my replace(_name, "⇔", "<==>") -- left right double arrow Unicode 21D4
    set _name to my replace(_name, "⇔", "<=>")
    set _name to my replace(_name, "⇒", "==>") -- rightwards double arrow Unicode 21D2
    set _name to my replace(_name, "⇒", "=>")
    set _name to my replace(_name, "⇐", "<==") -- leftwards double arrow Unicode 21D0
    set _name to my replace(_name, "⇐", "<=")
    set _name to my replace(_name, ">", ">") -- fullwidth greater-than sign Unicode FF1E
    set _name to my replace(_name, "<", "<") -- fullwidth less-than sign Unicode FF1C
    set _name to my replace(_name, "?", "?") -- fullwidth question mark Unicode FF1F
    set _name to my replace(_name, "*", "*") -- fullwidth asterisk Unicode FF0A 
    set _name to my replace(_name, "/", "/") -- fullwidth solidus Unicode FF0F
    set _name to my replace(_name, "\", "\\") -- fullwidth reverse solidus Unicode FF3C
    set _name to my replace(_name, "|", "|") -- fullwidth vertical line Unicode FF5C
    set _name to my replace(_name, ":", ":") -- fullwidth colon Unicode FF1A
    set _name to my replace(_name, """, "\"") -- fullwidth quotation Unicode FF02
    set _name to my removeTrailingSpaces(_name)
    return _name
end processName

on processBaseName(_name)
    set _name to my replace(_name, ".", "-")
    set _name to my removeTrailingSpaces(_name)
    return _name
end processBaseName

on replace(_string, _source, _replacement)
    set AppleScript's text item delimiters to _source
    set _items to every text item of _string
    set AppleScript's text item delimiters to _replacement
    return _items as Unicode text
end replace

on removeTrailingSpaces(_string)
    set AppleScript's text item delimiters to ""
    repeat until _string does not end with " "
        set _string to (characters 1 thru -2 of _string) as Unicode text
    end repeat
    return _string
end removeTrailingSpaces