Michael Bruny-Groth
Michael Bruny-Groth

Reputation: 3

How can I display progress on an Apple Script that sorts files into folders?

I'm still learning the rules around here, so please tell me if this question is inappropriate.

Background

I am a graphic designer. I have created an Apple Script that sorts logo files into folders to make a logo package. The process can take a minute or two, so I would like to be able to display a progress bar while running this Apple Script.

I am brand new to scripting but have managed to scrape together something that achieves the primary goal of sorting the logos.

The steps are:

  1. Select the folder with the files

  2. Sort the files into their appropriate folders based on the file name

  3. Delete any empty folders.

The problem

I can't get a progress display to work in this Apple Script.

The research

I've read Apple's documentation about displaying progress here: https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/DisplayProgress.html

This is the code they provide:

set theImages to choose file with prompt "Please select some images to process:" of type {"public.image"} with multiple selections allowed

set theImages to choose file with prompt "Please select some images to process:" of type {"public.image"} with multiple selections allowed

-- Update the initial progress information
set theImageCount to length of theImages
set progress total steps to theImageCount
set progress completed steps to 0
set progress description to "Processing Images..."
set progress additional description to "Preparing to process."

repeat with a from 1 to length of theImages

    -- Update the progress detail
    set progress additional description to "Processing image " & a & " of " & theImageCount

    -- Process the image

    -- Increment the progress
    set progress completed steps to a

    -- Pause for demonstration purposes, so progress can be seen
    delay 1
end repeat

-- Reset the progress information
set progress total steps to 0
set progress completed steps to 0
set progress description to ""
set progress additional description to ""

I've tried to implement it but am getting an error.

The error

Script Error

Finder got an error: Can’t set progress total steps to 53.

My Apple Script

I'm going to post the code prior to trying to add the display progess.

tell application "Finder"

    -- Gets the logo package folder from a prompt
    set packageFolder to (choose folder with prompt "Please choose your logo package folder") as string



    -- REVERSE JPG CLEANUP
    delete (every file of folder packageFolder whose name contains "reverse-rgb-300.jpg")
    delete (every file of folder packageFolder whose name contains "reverse-rgb-900.jpg")



    -- Moves files from the logo package folder into their appropriate configuration subfolders
    move (every file of folder packageFolder whose name contains "logo-") to folder (packageFolder & "Logo")
    move (every file of folder packageFolder whose name contains "logotype-") to folder (packageFolder & "Logotype")
    move (every file of folder packageFolder whose name contains "logoMark-") to folder (packageFolder & "Logo Mark")



    -- LOGO FOLDER
    -- Sort logo folder files into their appropriate color scheme folders
    move (every file of folder (packageFolder & "Logo") whose name contains "fullColor") to folder (packageFolder & "Logo:01 Full Color")
    move (every file of folder (packageFolder & "Logo") whose name contains "oneColor") to folder (packageFolder & "Logo:02 One Color")
    move (every file of folder (packageFolder & "Logo") whose name contains "reverse") to folder (packageFolder & "Logo:03 Reverse")

    -- FULL COLOR FOLDER ==========
    -- Moves files from the 01 Full Color folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logo:01 Full Color") whose name contains "cmyk") to folder (packageFolder & "Logo:01 Full Color:Print")
    move (every file of folder (packageFolder & "Logo:01 Full Color") whose name contains "pms") to folder (packageFolder & "Logo:01 Full Color:Print")
    move (every file of folder (packageFolder & "Logo:01 Full Color") whose name contains "rgb") to folder (packageFolder & "Logo:01 Full Color:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logo:01 Full Color:Digital") whose name contains ".jpg") to folder (packageFolder & "Logo:01 Full Color:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logo:01 Full Color:Digital") whose name contains ".png") to folder (packageFolder & "Logo:01 Full Color:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logo:01 Full Color:Print") whose name contains "cmyk") to folder (packageFolder & "Logo:01 Full Color:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logo:01 Full Color:Print") whose name contains "pms-c") to folder (packageFolder & "Logo:01 Full Color:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logo:01 Full Color:Print") whose name contains "pms-u") to folder (packageFolder & "Logo:01 Full Color:Print:03 Pantone Uncoated")

    -- ONE COLOR FOLDER ==========
    -- Moves files from the 02 One Color folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logo:02 One Color") whose name contains "cmyk") to folder (packageFolder & "Logo:02 One Color:Print")
    move (every file of folder (packageFolder & "Logo:02 One Color") whose name contains "pms") to folder (packageFolder & "Logo:02 One Color:Print")
    move (every file of folder (packageFolder & "Logo:02 One Color") whose name contains "rgb") to folder (packageFolder & "Logo:02 One Color:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logo:02 One Color:Digital") whose name contains ".jpg") to folder (packageFolder & "Logo:02 One Color:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logo:02 One Color:Digital") whose name contains ".png") to folder (packageFolder & "Logo:02 One Color:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logo:02 One Color:Print") whose name contains "cmyk") to folder (packageFolder & "Logo:02 One Color:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logo:02 One Color:Print") whose name contains "pms-c") to folder (packageFolder & "Logo:02 One Color:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logo:02 One Color:Print") whose name contains "pms-u") to folder (packageFolder & "Logo:02 One Color:Print:03 Pantone Uncoated")

    -- REVERSE FOLDER ==========
    -- Moves files from the 03 Reverse folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logo:03 Reverse") whose name contains "cmyk") to folder (packageFolder & "Logo:03 Reverse:Print")
    move (every file of folder (packageFolder & "Logo:03 Reverse") whose name contains "pms") to folder (packageFolder & "Logo:03 Reverse:Print")
    move (every file of folder (packageFolder & "Logo:03 Reverse") whose name contains "rgb") to folder (packageFolder & "Logo:03 Reverse:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logo:03 Reverse:Digital") whose name contains ".jpg") to folder (packageFolder & "Logo:03 Reverse:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logo:03 Reverse:Digital") whose name contains ".png") to folder (packageFolder & "Logo:03 Reverse:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logo:03 Reverse:Print") whose name contains "cmyk") to folder (packageFolder & "Logo:03 Reverse:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logo:03 Reverse:Print") whose name contains "pms-c") to folder (packageFolder & "Logo:03 Reverse:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logo:03 Reverse:Print") whose name contains "pms-u") to folder (packageFolder & "Logo:03 Reverse:Print:03 Pantone Uncoated")



    -- LOGO MARK FOLDER
    -- Sort logo mark folder files into their appropriate color scheme folders
    move (every file of folder (packageFolder & "Logo Mark") whose name contains "fullColor") to folder (packageFolder & "Logo Mark:01 Full Color")
    move (every file of folder (packageFolder & "Logo Mark") whose name contains "oneColor") to folder (packageFolder & "Logo Mark:02 One Color")
    move (every file of folder (packageFolder & "Logo Mark") whose name contains "reverse") to folder (packageFolder & "Logo Mark:03 Reverse")

    -- FULL COLOR FOLDER ==========
    -- Moves files from the 01 Full Color folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logo Mark:01 Full Color") whose name contains "cmyk") to folder (packageFolder & "Logo Mark:01 Full Color:Print")
    move (every file of folder (packageFolder & "Logo Mark:01 Full Color") whose name contains "pms") to folder (packageFolder & "Logo Mark:01 Full Color:Print")
    move (every file of folder (packageFolder & "Logo Mark:01 Full Color") whose name contains "rgb") to folder (packageFolder & "Logo Mark:01 Full Color:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logo Mark:01 Full Color:Digital") whose name contains ".jpg") to folder (packageFolder & "Logo Mark:01 Full Color:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logo Mark:01 Full Color:Digital") whose name contains ".png") to folder (packageFolder & "Logo Mark:01 Full Color:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logo Mark:01 Full Color:Print") whose name contains "cmyk") to folder (packageFolder & "Logo Mark:01 Full Color:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logo Mark:01 Full Color:Print") whose name contains "pms-c") to folder (packageFolder & "Logo Mark:01 Full Color:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logo Mark:01 Full Color:Print") whose name contains "pms-u") to folder (packageFolder & "Logo Mark:01 Full Color:Print:03 Pantone Uncoated")

    -- ONE COLOR FOLDER ==========
    -- Moves files from the 02 One Color folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logo Mark:02 One Color") whose name contains "cmyk") to folder (packageFolder & "Logo Mark:02 One Color:Print")
    move (every file of folder (packageFolder & "Logo Mark:02 One Color") whose name contains "pms") to folder (packageFolder & "Logo Mark:02 One Color:Print")
    move (every file of folder (packageFolder & "Logo Mark:02 One Color") whose name contains "rgb") to folder (packageFolder & "Logo Mark:02 One Color:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logo Mark:02 One Color:Digital") whose name contains ".jpg") to folder (packageFolder & "Logo Mark:02 One Color:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logo Mark:02 One Color:Digital") whose name contains ".png") to folder (packageFolder & "Logo Mark:02 One Color:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logo Mark:02 One Color:Print") whose name contains "cmyk") to folder (packageFolder & "Logo Mark:02 One Color:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logo Mark:02 One Color:Print") whose name contains "pms-c") to folder (packageFolder & "Logo Mark:02 One Color:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logo Mark:02 One Color:Print") whose name contains "pms-u") to folder (packageFolder & "Logo Mark:02 One Color:Print:03 Pantone Uncoated")

    -- REVERSE FOLDER ==========
    -- Moves files from the 03 Reverse folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logo Mark:03 Reverse") whose name contains "cmyk") to folder (packageFolder & "Logo Mark:03 Reverse:Print")
    move (every file of folder (packageFolder & "Logo Mark:03 Reverse") whose name contains "pms") to folder (packageFolder & "Logo Mark:03 Reverse:Print")
    move (every file of folder (packageFolder & "Logo Mark:03 Reverse") whose name contains "rgb") to folder (packageFolder & "Logo Mark:03 Reverse:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logo Mark:03 Reverse:Digital") whose name contains ".jpg") to folder (packageFolder & "Logo Mark:03 Reverse:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logo Mark:03 Reverse:Digital") whose name contains ".png") to folder (packageFolder & "Logo Mark:03 Reverse:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logo Mark:03 Reverse:Print") whose name contains "cmyk") to folder (packageFolder & "Logo Mark:03 Reverse:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logo Mark:03 Reverse:Print") whose name contains "pms-c") to folder (packageFolder & "Logo Mark:03 Reverse:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logo Mark:03 Reverse:Print") whose name contains "pms-u") to folder (packageFolder & "Logo Mark:03 Reverse:Print:03 Pantone Uncoated")



    -- LOGOTYPE FOLDER
    -- Sort logotype folder files into their appropriate color scheme folders
    move (every file of folder (packageFolder & "Logotype") whose name contains "fullColor") to folder (packageFolder & "Logotype:01 Full Color")
    move (every file of folder (packageFolder & "Logotype") whose name contains "oneColor") to folder (packageFolder & "Logotype:02 One Color")
    move (every file of folder (packageFolder & "Logotype") whose name contains "reverse") to folder (packageFolder & "Logotype:03 Reverse")

    -- FULL COLOR FOLDER ==========
    -- Moves files from the 01 Full Color folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logotype:01 Full Color") whose name contains "cmyk") to folder (packageFolder & "Logotype:01 Full Color:Print")
    move (every file of folder (packageFolder & "Logotype:01 Full Color") whose name contains "pms") to folder (packageFolder & "Logotype:01 Full Color:Print")
    move (every file of folder (packageFolder & "Logotype:01 Full Color") whose name contains "rgb") to folder (packageFolder & "Logotype:01 Full Color:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logotype:01 Full Color:Digital") whose name contains ".jpg") to folder (packageFolder & "Logotype:01 Full Color:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logotype:01 Full Color:Digital") whose name contains ".png") to folder (packageFolder & "Logotype:01 Full Color:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logotype:01 Full Color:Print") whose name contains "cmyk") to folder (packageFolder & "Logotype:01 Full Color:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logotype:01 Full Color:Print") whose name contains "pms-c") to folder (packageFolder & "Logotype:01 Full Color:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logotype:01 Full Color:Print") whose name contains "pms-u") to folder (packageFolder & "Logotype:01 Full Color:Print:03 Pantone Uncoated")

    -- ONE COLOR FOLDER ==========
    -- Moves files from the 02 One Color folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logotype:02 One Color") whose name contains "cmyk") to folder (packageFolder & "Logotype:02 One Color:Print")
    move (every file of folder (packageFolder & "Logotype:02 One Color") whose name contains "pms") to folder (packageFolder & "Logotype:02 One Color:Print")
    move (every file of folder (packageFolder & "Logotype:02 One Color") whose name contains "rgb") to folder (packageFolder & "Logotype:02 One Color:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logotype:02 One Color:Digital") whose name contains ".jpg") to folder (packageFolder & "Logotype:02 One Color:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logotype:02 One Color:Digital") whose name contains ".png") to folder (packageFolder & "Logotype:02 One Color:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logotype:02 One Color:Print") whose name contains "cmyk") to folder (packageFolder & "Logotype:02 One Color:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logotype:02 One Color:Print") whose name contains "pms-c") to folder (packageFolder & "Logotype:02 One Color:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logotype:02 One Color:Print") whose name contains "pms-u") to folder (packageFolder & "Logotype:02 One Color:Print:03 Pantone Uncoated")

    -- REVERSE FOLDER ==========
    -- Moves files from the 03 Reverse folder to their appropriate application folder
    move (every file of folder (packageFolder & "Logotype:03 Reverse") whose name contains "cmyk") to folder (packageFolder & "Logotype:03 Reverse:Print")
    move (every file of folder (packageFolder & "Logotype:03 Reverse") whose name contains "pms") to folder (packageFolder & "Logotype:03 Reverse:Print")
    move (every file of folder (packageFolder & "Logotype:03 Reverse") whose name contains "rgb") to folder (packageFolder & "Logotype:03 Reverse:Digital")

    -- Moves files from the digital application folder to the bitmap folder
    move (every file of folder (packageFolder & "Logotype:03 Reverse:Digital") whose name contains ".jpg") to folder (packageFolder & "Logotype:03 Reverse:Digital:Bitmap")
    move (every file of folder (packageFolder & "Logotype:03 Reverse:Digital") whose name contains ".png") to folder (packageFolder & "Logotype:03 Reverse:Digital:Bitmap")

    -- Moves files from the print application folder to their appropriate color gamut folder
    move (every file of folder (packageFolder & "Logotype:03 Reverse:Print") whose name contains "cmyk") to folder (packageFolder & "Logotype:03 Reverse:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logotype:03 Reverse:Print") whose name contains "pms-c") to folder (packageFolder & "Logotype:03 Reverse:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logotype:03 Reverse:Print") whose name contains "pms-u") to folder (packageFolder & "Logotype:03 Reverse:Print:03 Pantone Uncoated")

end tell



-- Delete any empty folders
tell application "Finder"
    set posixPath to quoted form of POSIX path of packageFolder
    do shell script "find " & posixPath & " -name '.DS_Store' -type f -delete && find " & posixPath & " -empty -type d -delete"
    display alert "Congratulations! Your logo package is complete."
end tell

I understand if this is too much to ask, but I know that I wouldn't be able to extrapolate a solution from a brief snippet of code with my current skill level in this arena.

To restate the problem, I am simply trying to display a progress bar while this script is running.

Thank you all!

Upvotes: 0

Views: 923

Answers (1)

vadian
vadian

Reputation: 285072

You got 32 move groups and one delete block, so at the beginning of the script initialize the progress bar. The Finder tell block starts later

-- Gets the logo package folder from a prompt
set packageFolder to (choose folder with prompt "Please choose your logo package folder") as string

set progress total steps to 33
set progress completed steps to 0
set progress description to "Processing Files..."
set progress additional description to "Preparing to process."

Instead of a loop you have to increment the completed steps property after each group and you can even display a message. For convenience I suggest two handlers. Put them at the end of the script outside of the Finder tell block.

on incrementCompleted()
    set progress completed steps to (get progress completed steps) + 1
end incrementCompleted

on displayProgressMessage(msg)
    set progress additional description to msg
end displayProgressMessage

Now comes the move part, here are the first two groups, you have to add the rest (the my prefix is crucial)

tell application "Finder"

    -- REVERSE JPG CLEANUP
    my displayProgressMessage("REVERSE JPG CLEANUP")
    delete (every file of folder packageFolder whose name contains "reverse-rgb-300.jpg")
    delete (every file of folder packageFolder whose name contains "reverse-rgb-900.jpg")
    my incrementCompleted()


    -- Moves files from the logo package folder into their appropriate configuration subfolders
    my displayProgressMessage("Moves files from the logo package folder into their appropriate configuration subfolders")
    move (every file of folder packageFolder whose name contains "logo-") to folder (packageFolder & "Logo")
    move (every file of folder packageFolder whose name contains "logotype-") to folder (packageFolder & "Logotype")
    move (every file of folder packageFolder whose name contains "logoMark-") to folder (packageFolder & "Logo Mark")
    my incrementCompleted()

    ...

At the end reset the progress bar

    -- Moves files from the print application folder to their appropriate color gamut folder
    my displayProgressMessage("Moves files from the print application folder to their appropriate color gamut folder")
    move (every file of folder (packageFolder & "Logotype:03 Reverse:Print") whose name contains "cmyk") to folder (packageFolder & "Logotype:03 Reverse:Print:01 CMYK")
    move (every file of folder (packageFolder & "Logotype:03 Reverse:Print") whose name contains "pms-c") to folder (packageFolder & "Logotype:03 Reverse:Print:02 Pantone Coated")
    move (every file of folder (packageFolder & "Logotype:03 Reverse:Print") whose name contains "pms-u") to folder (packageFolder & "Logotype:03 Reverse:Print:03 Pantone Uncoated")
    my incrementCompleted()
end tell

-- Delete any empty folders

displayProgressMessage("Delete any empty folders") -- outside of a tell block `my` is not needed

-- The shell script part is not related to the Finder
set posixPath to quoted form of POSIX path of packageFolder
do shell script "find " & posixPath & " -name '.DS_Store' -type f -delete && find " & posixPath & " -empty -type d -delete"


set progress total steps to 0
set progress completed steps to 0
set progress description to ""
set progress additional description to ""

tell application "Finder" to display alert "Congratulations! Your logo package is complete."

Upvotes: 1

Related Questions