首页 > 解决方案 > 如何在将文件分类到文件夹的 Apple 脚本上显示进度?

问题描述

我还在学习这里的规则,所以请告诉我这个问题是否不合适。

背景

我是一名平面设计师。我创建了一个 Apple 脚本,将徽标文件分类到文件夹中以制作徽标包。该过程可能需要一两分钟,因此我希望能够在运行此 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。

我的苹果脚本

在尝试添加显示进程之前,我将发布代码。

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

我知道这是否要求太多,但我知道以我目前在这个领域的技能水平,我无法从简短的代码片段中推断出解决方案。

为了重申这个问题,我只是想在这个脚本运行时显示一个进度条。

谢谢你们!

标签: applescriptprogress-bar

解决方案


你有 32 个move组和一个delete块,所以在脚本的开头初始化进度条。告诉Finder块稍后开始

-- 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将它们放在tell 块之外的脚本末尾。

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

推荐阅读