-
-
Save oliveratgithub/b9030365c9ae483984ea to your computer and use it in GitHub Desktop.
-- This code comes from https://gist.github.com/oliveratgithub/ | |
-- Open in AppleScript Editor and save as Application | |
-- ------------------------------------------------------------ | |
--this is required to break the filename into pieces (separate name and extension) | |
set text item delimiters to "." | |
tell application "Finder" | |
set all_files to every item of (choose file with prompt "Choose the Files you'd like to rename:" with multiple selections allowed) as list | |
display dialog "New file name:" default answer "" | |
set new_name to text returned of result | |
--now we start looping through all selected files. 'index' is our counter that we initially set to 1 and then count up with every file. | |
--the 'index' number is of course required for the sequential renaming of our files! | |
repeat with index from 1 to the count of all_files | |
--using our index, we select the appropriate file from our list | |
set this_file to item index of all_files | |
set {itemName, itemExtension} to {name, name extension} of this_file | |
--if the index number is lower than 10, we will add a preceding "0" for a proper filename sorting later | |
if index is less than 10 then | |
set index_prefix to "0" | |
else | |
set index_prefix to "" | |
end if | |
-- | |
--lets check if the current file from our list (based on index-number) has even any file-extension | |
if itemExtension is "" then | |
-- "" means there is no file-extension present. | |
set file_extension to "" | |
else | |
--yup, we are currently processing a file that has a file-extension | |
--we have to re-add the original file-extension after changing the name of the file! | |
set file_extension to "." & itemExtension | |
end if | |
--let's rename our file, add the sequential number from 'index' and add the file-extension to it | |
set the name of this_file to new_name & index_prefix & index & file_extension as string | |
end repeat | |
--congratulations for successfully accomplishing the batch renaming task :) | |
display alert "All done! Renamed " & index & " files with '" & new_name & "' for you. Have a great day! :)" | |
end tell |
-- This code comes from https://gist.github.com/oliveratgithub/ | |
-- Open in AppleScript Editor and save as Application | |
-- ------------------------------------------------------------ | |
--this is required to break the filename into pieces (separate name and extension) | |
set text item delimiters to "." | |
-- Let the App receive drag'n'dropped files | |
on open theDroppedItems | |
-- build the file list based on the dropped files | |
set all_files to every item of theDroppedItems as list | |
tell application "Finder" | |
display dialog "New file name:" default answer "" | |
set new_name to text returned of result | |
--now we start looping through all selected files. 'index' is our counter that we initially set to 1 and then count up with every file. | |
--the 'index' number is of course required for the sequential renaming of our files! | |
repeat with index from 1 to the count of all_files | |
--using our index, we select the appropriate file from our list | |
set this_file to item index of all_files | |
set {itemName, itemExtension} to {name, name extension} of this_file | |
--if the index number is lower than 10, we will add a preceding "0" for a proper filename sorting later | |
if index is less than 10 then | |
set index_prefix to "0" | |
else | |
set index_prefix to "" | |
end if | |
-- | |
--lets check if the current file from our list (based on index-number) has even any file-extension | |
if itemExtension is "" then | |
-- "" means there is no file-extension present. | |
set file_extension to "" | |
else | |
--yup, we are currently processing a file that has a file-extension | |
--we have to re-add the original file-extension after changing the name of the file! | |
set file_extension to "." & itemExtension | |
end if | |
--let's rename our file, add the sequential number from 'index' and add the file-extension to it | |
set the name of this_file to new_name & index_prefix & index & file_extension as string | |
end repeat | |
--congratulations for successfully accomplishing the batch renaming task :) | |
display alert "All done! Renamed " & index & " files with '" & new_name & "' for you. Have a great day! :)" | |
end tell | |
end open |
@Jimmbo OR you ONCE save the Script Drag-n-Drop Files Batch Rename.scpt from within Script Editor as File Format "Application", then drag newly created Application's icon to your Dock.
Now you have it accessible basically all the time to drag'n'drop files onto it from everywhere in Finder. It will ask for what new name to give them still, of course – if you don't need that part of the script, remove it / hard code any custom name you always want to use or modify it to just add continuous numbering without changing the name at all.
Otherwise you use the new right-click > "Rename X items…"-function in Finder directly or use a tool like A Better Finder Rename, if that fits better into your workflow.
Thanks Oliver. I actually own several renaming apps, but was looking for a script I could use within a larger script to streamline my workflow.
I'm looking to actually set an automator to prepend a text to file names. I have been looking for days unsuccessfully. I have managed to create a service that takes file names, creates a variable with such, and renames by prepending, but it won't work. Any help welcome!
@Gahamelas you could modify the Apple Script from this Gist to work with a selected file within an Automator action, instead of a user dialogue to choose files. Automator is capable of running Apple Scripts within an automation step.
@Gahamelas you could modify the Apple Script from this Gist to work with a selected file within an Automator action, instead of a user dialogue to choose files. Automator is capable of running Apple Scripts within an automation step.
Thanks. What I want to accomplish is to select several files in Finder and then run the Automator action that will prompt me to write a name to prepend to those files. Will this do that?
What I want to accomplish is to select several files in Finder and then run the Automator action that will prompt me to write a name to prepend to those files. Will this do that?
@Gahamelas No, the Apple Script here won't do this - unless you'd adjust it.
HOWEVER, try this «Quick Action» in Automator 😉
Cheers
Not to distract you from coming up with a Drafts solution, but this renaming program does that plus much more. It's awesome.
👍 you can do it within Finder itself, to be honest… Right click files > Rename… > Add Text & Prepend. Done
What I want to accomplish is to select several files in Finder and then run the Automator action that will prompt me to write a name to prepend to those files. Will this do that?
@Gahamelas No, the Apple Script here won't do this - unless you'd adjust it.HOWEVER, try this «Quick Action» in Automator 😉
Cheers
This works like a charm! I had similar workflow but I was missing some bits here and there +1: Thank you so much!
👍 you can do it within Finder itself, to be honest… Right click files > Rename… > Add Text & Prepend. Done
Yes, the point of the workflow is to now have to click so many times.
Hi Oliver. is there any way to make the script to run once a day, go to selected folders and to rename the files in those folders to contain a specific string at the very beginning of the file name UNLESS they already contain such string? Imagine I have a folder named X007-007 and throughout the day I would save several files in the folder, at the end of the day I need all files to start with X007-007-a_v1 (where A would) be the number of the file in the folder (v1 is just for a version 1). the next day I need the script to ignore those files with the prefix (to avoid X007-007-a_v1X007-007-a_v1X.....) and just rename the files that are new....(I have several hundreds folders like this, inluding several thousands files, every day adding some 20 new files....and such script would make me 1. happy, 2. organised). In case of a new folder, I would just add one (I hope) line in the code...THANK YOU SUPER BIG TIMES
something like --- rename all files (except for those which are already renamed) in folder X007-007 to X007-007-00A_v1-original name of the file.docx
with in the end the files would be
X007-007-001_v1-opening.docx
X007-007-002_v1-randomfile.doc
X007-007-003_v1-anotherrandomfile.pdf
X007-007-004_v1-original picture.png
and if I add a new file - document.doc, in the evening once I run the script it should be renamed to
X007-007-005_v1-document.doc
(however if I duplicate a randomfile.doc and save it to X007-007-002_v2-randomfile.doc such document should not be renamed....)
Hi Oliver. is there any way to make the script to run once a day, go to selected folders and to rename the files in those folders to contain a specific string at the very beginning of the file name UNLESS they already contain such string?
Hey @PetrKGitHub
Sure something like this would be possible, but it incorporates some additional logics, starting already with a scheduler mechanism. I think you could put something together with "crontab" (if you're technically skilled) or a macOS app giving you a UI to control repeating jobs. The rest needs either a reworked Apple Script or at least 1 additional / preceeding Script.
Overall however, it's not a simple solution and has many "moving pieces" that I can cover here :)
Hi Oliver,
Thank you for the code! I love how easy it is to use. I know it would take some extra manipulation, but is there a way to have it reference a document with a list of names to use instead of using one word and putting a number at the end? Thank you in advance for your help.
I know it would take some extra manipulation, but is there a way to have it reference a document with a list of names to use instead of using one word and putting a number at the end?
@laneharding Sure that’s possible, it requires some rework with additional code though. Here‘s a good discussion about just getting every line of a text file (.txt) into a dynamic list within the script: https://stackoverflow.com/a/48967981/5750030
The question is, if this text file will always be read from the same location, or you‘d choose it manually when the script runs? Also consider error handling when the file happens to be empty. Or what if the number of names in the text file don’t add up to the number of selected files to be renamed?
Assuming you manage to add code to read the lines from text file into a list within the script, definitely you‘d have to disable/remove lines 8 and 17-21. Then adding a repeat, looping through modifying line 9 (set new_name) to take the first name from the text file list, but making sure the next file would take also the 2nd name from the list, etc.
Ok, thanks. So if I understand correctly, in order to suit the script's need to check twice which files it will process, I need to slow my workflow in one of two ways:
Choose files, run script, navigate open/save dialog to find and re-select files, or
Choose files, reveal the script-app's icon in Finder, select files, and drag them over.