Help with making a program recursive
I was trying to add file extensions to some files on my old mac and the only solution I found was this applescript on this website:
http://techierambles.blogspot.com/2009/03/applescript-to-automatically-add-file. html
here's the code formatted correctly:
(* EPSF (eps), AI (ai), PDF (pdf), ART5 is Illustrator indd = Creator: InDn, Type: IDd5 indd = Creator: InDn, Type: IDd4 ai = Creator: ART5, Type: PDF eps = Creator: ART5, Type: EPSF psd = Creator: 8BIM, Type: 8BPS pdf = Creator: CARO, Type: PDF jpg = Creator: 8BIM, Type: JPEG eps = Creator: 8BIM, Type: EPSF qxd = Creator: XPR3, Type: XPRJ tif = Creator: 8BIM, Type: TIFF *) -- THESE PROPERTIES ARE FOR THE NOTIFICATION ROUTINE -- if true, the script will speak the alert. If false, the script will --display an alert property speak_alert : false -- set the amount of time before dialogs auto-answer.dialog property dialog_timeout : 30 -- THIS PROPERTY IS USED TO INDICATE WHETHER THE SCRIPT --CHECKS THE INCOMING FILES FOR COMPLETED TRANSFER -- SET THIS PROPERTY TO TRUE FOR FOLDERS SHARED VIA --FILE SHARING -- NOTE THAT ITEMS DROPPED IN SHARED FOLDERS WILL --HAVE THEIR LABEL SET TO 7 property copy_checks_indicator : false -- THESE PROPERTIES ARE FOR THE STATUS CHECKING --ROUTINES property item_check_delay_time : 2 property folder_check_delay_time : 3 property special_label_index : 7 on adding folder items to this_folder after receiving added_items try if copy_checks_indicator is true then -- CHECK THE FILES TO MAKE SURE THEY'RE --COMPLETELY AVAILABLE set the added_items to my check_added_items(the added_items) if the added_items is {} then return "no valid items" end if tell application "Finder" --get the name of the folder set this_folder_name to the name of this_folder end tell -- find out how many new items have been placed in the folder set new_item_count to the number of items in the added_items tell application "Finder" repeat with x in added_items copy name of x as string to FileName copy file type of x as string to FileType copy creator type of x as string to FileCreator -- check for Quark if FileType is "XPRJ" and FileCreator is "XPR3" then if FileName does not end with ".qxd" then set Suffix to ".qxd" set the name of x to FileName & Suffix end if else if FileType is "XDOC" and FileCreator is "XPR3" then if FileName does not end with ".qxd" then set Suffix to ".qxd" set the name of x to FileName & Suffix end if -- check for Illustrator ai else if FileType is "PDF" and FileCreator is "ART5" then if FileName does not end with ".ai" then set Suffix to ".ai" set the name of x to FileName & Suffix end if -- check for InDesign else if FileType is "InDn" and FileCreator is "IDd5" then if FileName does not end with ".indd" then set Suffix to ".indd" set the name of x to FileName & Suffix end if --check for InDesign CS2 else if FileType is "InDn" and FileCreator is "IDd4" then if FileName does not end with ".indd" then set Suffix to ".indd" set the name of x to FileName & Suffix end if -- check for Illustrator eps else if FileType is "EPSF" and FileCreator is "ART5" then if FileName does not end with ".eps" then set Suffix to ".eps" set the name of x to FileName & Suffix end if -- check for Photoshop psd else if FileType is "8BPS" and FileCreator is "8BIM" then if FileName does not end with ".psd" then set Suffix to ".psd" set the name of x to FileName & Suffix end if -- check for Photoshop tif else if FileType is "TIFF" and FileCreator is "8BIM" then if FileName does not end with ".tif" then set Suffix to ".tif" set the name of x to FileName & Suffix end if -- check for Photoshop jpg else if FileType is "JPEG" and FileCreator is "8BIM" then if FileName does not end with ".jpg" then set Suffix to ".jpg" set the name of x to FileName & Suffix end if -- check for pdf else if FileType is "PDF" and FileCreator is "CARO" then if FileName does not end with ".pdf" then set Suffix to ".pdf" set the name of x to FileName & Suffix end if end if end repeat end tell end try end adding folder items to on remove_labels(the added_items) tell application "Finder" repeat with this_item in the added_items set the label index of this_item to 0 end repeat end tell end remove_labels on check_added_items(the added_items) -- check the transfer status of every added file to determine -- if each file has completed being moved into the --attached folder set the notbusy_items to {} repeat with i from 1 to the number of items in the added_items set this_item to (item i of the added_items) if my check_busy_status(this_item) is false then set the end of the notbusy_items to this_item end if end repeat return the notbusy_items end check_added_items on check_busy_status(this_item) -- a folder can contain items partially transfered -- this routine will wait for all the folder contents to transfer if the last character of (this_item as text) is ":" then set the check_flag to false repeat -- look for any files within the folder that are still transferring tell application "Finder" try set the busy_items to the name of every file of the entire contents of this_item whose file type begins with "bzy" on error set the busy_items to {} end try end tell if the check_flag is true and the busy_items is {} then return false -- pause for the indicated time delay the folder_check_delay_time -- set the flag and check again set the check_flag to true end repeat else -- the passed item is a single file, suitcase, clipping, etc. -- check the label of the item. If it is the marked label --then it's already been processed so ignore. tell application "Finder" if (the label index of this_item) as integer is the special_label_index then return "ignore" end if end tell set the check_flag to false repeat tell application "Finder" set the item_file_type to the file type of this_item end tell if the check_flag is true and the item_file_type does not start with "bzy" then tell application "Finder" set the label index of this_item to the special_label_index end tell -- allow the Finder time to change the label delay the item_check_delay_time return false else if the item_file_type does not start with "bzy" then -- set the flag and check again set the check_flag to true end if -- pause for the indicated time delay the item_check_delay_time end repeat end if end check_busy_status --HANDLER FOR KEEPING THIS FOLDER OPEN --To activate the handler, remove the comment --markers (the parens and asterisks) --at the beginning and end of the following handler --and save this script. (* on closing folder window for this_folder beep tell application "Finder" open this_folder end tell end closing folder window for *)
It works well and does exactly what I want when I make it a folder action to a folder and then put files into it. The only problem is that if I put a folder into the folder it doesn't work. The files inside the folder aren't affected and don't have a file extension added to them. I have hundreds and hundreds of files all within subfolders. Does anyone know how to make this program recursive so that files within folders will be affected too. I know nothing about applescript and am really up the creek if I can't get this working. Any help is appreciated.