There’s nothing innovative or clever here, it is a very quick (maybe 20 minute) script, it just serves a purpose I thought it’s possible someone else might find useful.
I had a lot of video (movie) files. In the file names, some had periods or underscores instead of spaces between the words, many had a bunch of junk I didn’t want at the end of the name, and many had the year demarcated in different ways -
2016
- 2016
[2016]
(2016)
So I made a script to sort these out for me.
Most of the files had a year immediately preceeding the junk in the name. So the script looks for a (probable) year and deletes everything after it, preserving extensions. It converts periods (except for a final one for an extension) into spaces, and converts underscores into spaces. It processes both files and folders.
Because most of these files were downloaded from the internet, I thought it reasonably likely that someone else would have the same sort of filename clutter and might come across this and want to use it.
It worked well on my files. Not all included the year, but on my test folder of 116 files, it fixed 101 correctly, ignored 14, and would have gotten one wrong if I hadn’t caught it in preview and fixed it manually, because it put the date near the beginning.
Note I’m ignoring things as possible dates if they’re prior to 1950… you might want to change that if you have older stuff. Also ignoring things after 2025, so if you’re using this after 2025 (if Applescript’s still a thing that runs ; ), then you might want to change that too.
use AppleScript version “2.4” – Yosemite (10.10) or later
use scripting additions
set rename to false
tell application "Finder"
if rename is false then
display dialog "The \"rename\" variable at the beginning of this script is set to FALSE, so your files will not be renamed. The script will simply preview what would be done."
else
display dialog "The \"rename\" variable at the beginning of this script is set to TRUE, so your file names will actually be modified!" & return & "Please click cancel and change this variable to FALSE if you would like to preview the changes first."
end if
set moviesFolder to choose folder with prompt "Select a folder of movies for renaming."
set filesList to every item of moviesFolder
set newFolderTitles to {}
set unprocessedFolderTitles to {}
set newFileTitles to {}
set unprocessedFileTitles to {}
repeat with aFile in filesList
set theTitle to the name of aFile
if the kind of aFile is "folder" then
set newTitle to my format_title(theTitle)
if newTitle ≠ false then
set newFolderTitles to newFolderTitles & newTitle
if rename is true then set the name of aFile to newTitle
else
set unprocessedFolderTitles to unprocessedFolderTitles & theTitle
end if
else
repeat with i from (count of characters of theTitle) to 1 by -1
if character i of theTitle is "." then
set theExtension to text (i + 1) through end of theTitle
set extensionlessTitle to text beginning through (i - 1) of theTitle
set newTitle to my format_title(theTitle)
if newTitle ≠ false then
set newTitle to newTitle & "." & theExtension
set newFileTitles to newFileTitles & newTitle
if rename is true then set the name of aFile to newTitle
else
set unprocessedFileTitles to unprocessedFileTitles & theTitle
end if
exit repeat
end if
end repeat
end if
end repeat
end tell
if rename is false then
set previewVariable to "The folders will be renamed as follows:" & return
repeat with anItem in newFolderTitles
set previewVariable to previewVariable & anItem & return
end repeat
set previewVariable to previewVariable & return & "The following folders will not have their names changed:" & return
repeat with anItem in unprocessedFolderTitles
set previewVariable to previewVariable & anItem & return
end repeat
set previewVariable to previewVariable & return & "The files will be renamed as follows:" & return
repeat with anItem in newFileTitles
set previewVariable to previewVariable & anItem & return
end repeat
set previewVariable to previewVariable & return & "The following files will not have their names changed:" & return
repeat with anItem in unprocessedFileTitles
set previewVariable to previewVariable & anItem & return
end repeat
return previewVariable
end if
on format_title(theTitle)
set newTitle to false
set spacedTitle to my replace_chars(theTitle, ".", " ")
set spacedTitle to my replace_chars(spacedTitle, "_", " ")
repeat with i from 1 to count of words of spacedTitle
set currentWord to word i of spacedTitle
set currentWord to my replace_chars(currentWord, "(", "")
set currentWord to my replace_chars(currentWord, ")", "")
set currentWord to my replace_chars(currentWord, "[", "")
set currentWord to my replace_chars(currentWord, "]", "")
set isInteger to false
try
set theYear to currentWord as integer
set isInteger to true
end try
if isInteger is true then
if theYear > 1950 and theYear < 2025 then
set newTitle to ""
repeat with j from 1 to i - 1
set newTitle to newTitle & word j of spacedTitle & " "
end repeat
set newTitle to newTitle & "(" & theYear & ")"
exit repeat
end if
end if
end repeat
return newTitle
end format_title
on replace_chars(this_text, search_string, replacement_string)
set AppleScript's text item delimiters to the search_string
set the item_list to every text item of this_text
set AppleScript's text item delimiters to the replacement_string
set this_text to the item_list as string
set AppleScript's text item delimiters to ""
return this_text
end replace_chars