Как я могу отобразить прогресс на Apple Script, который сортирует файлы по папкам? - PullRequest
0 голосов
/ 02 сентября 2018

Я все еще изучаю правила здесь, поэтому, пожалуйста, скажите мне, если этот вопрос неуместен.

Фон

Я графический дизайнер. Я создал скрипт Apple Script, который сортирует файлы логотипов по папкам для создания пакета логотипов. Процесс может занять минуту или две, поэтому я хотел бы иметь возможность отображать индикатор выполнения при запуске этого скрипта Apple.

Я новичок в написании сценариев, но мне удалось собрать воедино что-то, что достигает основной цели сортировки логотипов.

Шаги:

  1. Выберите папку с файлами

  2. Сортировка файлов в соответствующие папки по имени файла

  3. Удалить все пустые папки.

Проблема

Я не могу настроить отображение прогресса в этом скрипте Apple.

Исследование

Я прочитал документацию Apple об отображении прогресса здесь: https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/DisplayProgress.html

Вот код, который они предоставляют:

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 ""

Я пытался реализовать это, но получаю ошибку.

Ошибка

Ошибка скрипта

Finder получил ошибку: не удалось установить общее количество шагов для 53.

Мой Apple Script

Я собираюсь опубликовать код перед попыткой добавить экранные проги.

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

Я понимаю, если это слишком много, чтобы спросить, но я знаю, что не смогу экстраполировать решение из краткого фрагмента кода с моим текущим уровнем квалификации на этой арене.

Чтобы переформулировать проблему, я просто пытаюсь отобразить индикатор выполнения во время работы этого скрипта.

Спасибо всем!

1 Ответ

0 голосов
/ 02 сентября 2018

У вас есть 32 move группы и один delete блок, поэтому в начале скрипта инициализируйте индикатор выполнения. Блок Finder Tell запускается позже

-- 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."

Вместо цикла вы должны увеличивать свойство completed steps после каждой группы, и вы даже можете отобразить сообщение. Для удобства предлагаю два обработчика. Поместите их в конец скрипта за пределами блока Finder.

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

Теперь идет часть перемещения, вот первые две группы, вам нужно добавить остальные (префикс my имеет решающее значение)

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()

    ...

В конце сбросить индикатор выполнения

    -- 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."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...