5 Uses for Mac’s Applescript to Improve Productivity

Applescript is Apple’s somewhat obscure scripting language, but it’s a powerful tool for novice programs to take advantage of. With a few clever Applescripts that handle annoying tasks, we can increase productivity and automate your blues away.

Applescript interfaces with most Mac applications like Finder, iTunes, QuickTime and Mail. If you’re familiar with Automator, Applescript is sort of a power user’s version of that application.

Save this out as an application, and you’ll have a clickable toggle to reveal hidden files in Finder.

set newHiddenState to "YES"
try
    set oldHiddenState to do shell script "defaults read com.apple.finder AppleShowAllFiles"
    if oldHiddenState is in {"1", "YES"} then
        set newHiddenState to "NO"
    end if
end try
do shell script "defaults write com.apple.finder AppleShowAllFiles " & newHiddenState
do shell script "killAll Finder"

This script will prompt the user for a filename and then automatically rename selected files with that text string plus an incrementing index. It even helpfully adds leading zeros for files one through ten.

-- 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 file_name_count to text items of (get name 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 number of file_name_count is 1 then
            --file_name-count = 1 means, we extracted only 1 text-string from the full file name. So 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 "." & item -1 of file_name_count
        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 script will scale images to 50% of their original size.

-- Prompt for an image
set theImageFile to choose file of type "public.image" with prompt "Please select an image:"
 
-- Locate an output folder
set theOutputFolder to (path to desktop folder as string)
 
-- Launch Image Events
tell application "Image Events"
    launch
 
    -- Open the image
    set theImage to open theImageFile
    tell theImage
 
        -- Determine a save name for the image
        set theName to name
        set theSaveName to "smlr-" & theName
 
        -- Scale the image by 50%
        scale by factor 0.5
 
        -- Save the image to the output folder, using the save name
        save as file type in (theOutputFolder & theSaveName)
 
        -- Close the image
        close
    end tell
end tell

This uses much of the start of the previous scripts but scales to pixel widths instead. It will prompt the user for the desired pixel width and append that pixel width to the start of the new file’s name.

-- Prompt for an image
set theImageFile to choose file of type "public.image" with prompt "Please select an image:"
 
set dialogResult to (display dialog "Enter desired pixel width:" default answer "") try set pixelWidth to (text returned of dialogResult) as integer end try 
 
-- Locate an output folder
set theOutputFolder to (path to desktop folder as string)
 
-- Launch Image Events
tell application "Image Events"
    launch
 
    -- Open the image
    set theImage to open theImageFile
    tell theImage
 
        -- Determine a save name for the image
        set theName to name
        set theSaveName to (pixelWidth as text) & "-px-" & theName
 
        -- Scale the image to pixelWidth
        scale to size pixelWidth
 
        -- Save the image to the output folder, using the save name
        save as file type in (theOutputFolder & theSaveName)
 
        -- Close the image
        close
    end tell
end tell

This simple script duplicates a chosen folder to a chosen destination which can make complicated drag-and-drop copying a little less painful.

set backupTarget to (choose folder with prompt "Select a Backup Target")
set backupDestination to (choose folder with prompt "Select a Backup Destination")
tell application "Finder"
    duplicate folder backupTarget to folder backupDestination
end tell

To learn more about AppleScript, you can check out Apple’s own documentation. Better still is MacOSXAutomation.com, which is more noob-friendly.