RE: forbidden characters in applescript
RE: forbidden characters in applescript
- Subject: RE: forbidden characters in applescript
- From: "Jan-Bultereys" <email@hidden>
- Date: Tue, 11 Jan 2005 09:43:27 +0100
- Thread-topic: forbidden characters in applescript
thanks Philip for sharing this lovely script, that's exactly what I need.
best regards,jan
> ----------
> From: Philip Regan
> Sent: Monday, January 10, 2005 22:41 PM
> To: Jan-Bultereys
> Cc: email@hidden
> Subject: Re: forbidden characters in applescript
>
> Here's some code I wrote to help me with the exact same problem. We
> have a specific file naming convention at my company for all of our
> book files (putting Mac files onto Windows servers), and it's
> impossible to go through thousands of files by hand each time a book
> comes in.
>
>
> It's slow as can be, and not all the features work, but it does get
> the job done. Edit as you see fit...
>
>
> [code]
>
>
>
> property searchStrings : {"&", "+", "#", "!", "@", "$", "%", "^", "*", "(", ")", "-", "=", "[", "]", "<", ">", "?", " ", ";", "/", "\\", "\"", ",", "{", "}", "'", "."}
> property replacementStrings : {"and", "p", "s", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "."}
>
> global search_string
> global replacement_string
> global periodFlag
>
> set periodFlag to false
>
> tell application "Finder"
> set source_folder to choose folder with prompt "FindReplaceIllegalCharacters: Please select directory."
>
> set startTime to (current date)
>
> repeat with x from 1 to (get count of items in searchStrings)
> if x = 28 then
> set search_string to (item x of searchStrings)
> my countPeriods(source_folder)
> else
> set search_string to (item x of searchStrings)
> set replacement_string to (item x of replacementStrings)
> my createList(source_folder)
> end if
> end repeat
>
> set endTime to (current date)
> set runTime to (endTime - startTime)
> set runTimeText to ("RUNTIME: " & (runTime as text) & " seconds.")
> set changedFileLog to (((path to desktop folder) as text) & "ChangedFileLog.txt")
> my write_to_file(runTimeText, changedFileLog, true)
>
> if periodFlag is true then
> display dialog "Some files had extra periods in them. Please check the log and fix the filenames."
> end if
> end tell
>
> on countPeriods(item_list) --currently lists all files with a period. Need to coerce filename into a list, and/or view each *character* in turn and see if it's a period.
> set periodCount to 0
> set the the_items to list folder item_list without invisibles
> set item_list to item_list as string
> repeat with i from 1 to number of items in the the_items
> set the_item to item i of the the_items
> set the_item to (item_list & the_item) as alias
> set this_info to info for the_item
> set item_name to (name of this_info) as string
> if item_name contains search_string then
> set text item delimiters to search_string
> set periodCount to (count text items of item_name) - 1
> if periodCount > 1 then
> set periodFlag to true
> set periodFilename to ((the_item as string) & return)
> set periodFilenameLog to (((path to desktop folder) as text) & "FilenamesWithExtraPeriods.txt")
> my write_to_file(periodFilename, periodFilenameLog, true)
> end if
> end if
> if folder of this_info is true then
> my countPeriods(the_item)
> end if
> end repeat
> end countPeriods
>
> on createList(item_list)
> set the the_items to list folder item_list without invisibles
> set item_list to item_list as string
> repeat with i from 1 to number of items in the the_items
> set the_item to item i of the the_items
> set the_item to (item_list & the_item) as alias
> set this_info to info for the_item
> set the item_name to the name of this_info
> if item_name contains search_string then
> set changedFile to ((the_item as string) & return)
> set changedFileLog to (((path to desktop folder) as text) & "ChangedFileLog.txt")
> my write_to_file(changedFile, changedFileLog, true)
> my replaceString(item_name, the_item, search_string, replacement_string)>
> end if
> if folder of this_info is true then
> my createList(the_item)
> end if
> end repeat
> end createList
>
> on replaceString(current_name, the_item, search_string, replacement_string)
> set AppleScript's text item delimiters to search_string
> set the text_item_list to every text item of the current_name
> set AppleScript's text item delimiters to replacement_string
> set the new_item_name to the text_item_list as string
> set AppleScript's text item delimiters to ""
> my set_item_name(the_item, new_item_name)
> end replaceString
>
> on set_item_name(this_item, new_item_name)
> tell application "Finder"
> --activate
> set the parent_container_path to (the container of this_item) as text
> if not (exists item (the parent_container_path & new_item_name)) then
> try
> set the name of this_item to new_item_name
> on error the error_message number the error_number
> if the error_number is -59 then
> set the error_message to "This name contains improper characters, such as a colon (:)."
> else --the suggested name is too long
> set the error_message to error_message -- "The name is more than 31 characters long."
> end if
> --beep
> tell me to display dialog the error_message default answer new_item_name buttons {"Cancel", "Skip", "OK"} default button 3
> copy the result as list to {new_item_name, button_pressed}
> if the button_pressed is "Skip" then return 0
> my set_item_name(this_item, new_item_name)
> end try
> else --the name already exists
> --beep
> tell me to display dialog "This name is already taken, please rename." default answer new_item_name buttons {"Cancel", "Skip", "OK"} default button 3
> copy the result as list to {new_item_name, button_pressed}
> if the button_pressed is "Skip" then return 0
> my set_item_name(this_item, new_item_name)
> end if
> end tell
> end set_item_name
>
> on write_to_file(this_data, target_file, append_data)
> try
> set the target_file to the target_file as text
> set the open_target_file to open for access file target_file with write permission
> if append_data is false then set eof of the open_target_file to 0
> write this_data to the open_target_file starting at eof
> close access the open_target_file
> return true
> on error
> try
> close access file target_file
> end try
> return false
> end try
> end write_to_file
> [/code]
>
> HTH,
>
> --
>
> Philip Regan
>
>
> On 10 Jan 2005, at 08:58, Jan-Bultereys wrote:
>
>
> hi,
>
>
> I am trying to isolate the problem with forbidden characters,
>
> but I am not able to declare this in applescript
>
>
> I know you can 'overwrite' a forbidden character with the && but I am
> not able to
>
> compile the variable "forbidden"
>
>
> The idea is to declare "FileName" (check all the forbidden characters)
> and when it DOES contain those forbidden characters,
>
> replace it with an _ (underscore)
>
>
> any idea's are much appreciated.
>
>
>
> --set forbidden to "&&< > : " / \ | *?&&"
>
> display dialog forbidden
>
> repeat with temp_file in file_list
>
> set FileName to name of temp_file
>
> if FileName contains "/" or "(" or ")" or "&" then
>
> display dialog "You are using forbidden character"
>
> end if
>
> end repeat
>
> _______________________________________________
>
> Do not post admin requests to the list. They will be ignored.
>
> Applescript-users mailing list (email@hidden)
>
> Help/Unsubscribe/Update your Subscription:
>
>
>
> This email sent to email@hidden
>
>
>
>
>
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Applescript-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden