Беда с отредактированным appleScript - PullRequest
0 голосов
/ 28 июля 2011

Я только что отредактировал файл new item alert.scpt в папке / Macintosh HD / Library / Scripts / Folder Actions ... /. Мне удалось сохранить его после редактирования некоторых разрешений, но когда я нажимаю Run или Compile, ничего не происходит.

Это распространенная ошибка, или у меня проблема с яблоком, если кто-то не против посмотреть.

property Docs : "Macintosh HD:Users:Max:Downloads:Docs"
property Music : "Macintosh HD:Users:Max:Downloads:Music"
property Videos : "Macintosh HD:Users:Max:Downloads:Videos"
property Images : "Macintosh HD:Users:Max:Downloads:Images"
property Profiles : "Macintosh HD:Users:Max:Downloads:iPhone:Profiles"
property Zips : "Macintosh HD:Users:Max:Downloads:Zips"
property PSDs : "Macintosh HD:Users:Max:Downloads:PSDs"

on adding folder items to this_folder after receiving added_items
    try
        tell application "Finder"
            --get the name of the folder
            set the folder_name to the name of this_folder
            if (name of eachitem ends with ".png") then
                move eachitem to folder Images
            end if
            if (name of eachitem ends with ".JPEG") then
                move eachitem to folder Images
            end if
            if (name of eachitem ends with ".gif") then
                move eachitem to folder Images
            end if
            if (name of eachitem ends with ".jpg") then
                move eachitem to folder Images
            end if
            if (name of eachitem ends with ".jpeg") then
                move eachitem to folder Images
            end if
            if (name of eachitem ends with ".PNG") then
                move eachitem to folder Images
            end if
            if (name of eachitem ends with ".mov") then
                move eachitem to folder Videos
            end if
            if (name of eachitem ends with ".avi") then
                move eachitem to folder Videos
            end if
            if (name of eachitem ends with ".wma") then
                move eachitem to folder Videos
            end if
            if (name of eachitem ends with ".m4v") then
                move eachitem to folder Videos
            end if
            if (name of eachitem ends with ".mp4") then
                move eachitem to folder Music
            end if
            if (name of eachitem ends with ".mp3") then
                move eachitem to folder Music
            end if
            if (name of eachitem ends with ".wav") then
                move eachitem to folder Music
            end if
            if (name of eachitem ends with ".wma") then
                move eachitem to folder Music
            end if
            if (name of eachitem ends with ".pdf") then
                move eachitem to folder Docs
            end if
            if (name of eachitem ends with ".doc") then
                move eachitem to folder Docs
            end if
            if (name of eachitem ends with ".docx") then
                move eachitem to folder Docs
            end if
            if (name of eachitem ends with ".pages") then
                move eachitem to folder Docs
            end if
            if (name of eachitem ends with ".ppt") then
                move eachitem to folder Docs
            end if
            if (name of eachitem ends with ".pptx") then
                move eachitem to folder Docs
            end if
            if (name of eachitem ends with ".mobileprovision") then
                move eachitem to folder Profiles
            end if
            if (name of eachitem ends with ".zip") then
                move eachitem to folder Zips
            end if
            if (name of eachitem ends with ".psd") then
                move eachitem to folder PSDs
            end if


        end tell

        -- find out how many new items have been placed in the folder
        set the item_count to the number of items in the added_items
        --create the alert string
        set alert_message to ("Folder Actions Alert:" & return & return) as Unicode text
        if the item_count is greater than 1 then
            set alert_message to alert_message & (the item_count as text) & " new items have "
        else
            set alert_message to alert_message & "One new item has "
        end if
        set alert_message to alert_message & "been placed in folder " & «data utxt201C» & the folder_name & «data utxt201D» & "."
        set the alert_message to (the alert_message & return & return & "Would you like to view the added items?")

        display dialog the alert_message buttons {"Yes", "No"} default button 2 with icon 1 giving up after dialog_timeout
        set the user_choice to the button returned of the result

        if user_choice is "Yes" then
            tell application "Finder"
                --go to the desktop 
                activate
                --open the folder
                open this_folder
                --select the items
                reveal the added_items
            end tell
        end if
    end try
end adding folder items to

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

Обработчик действий с папками завершится с ошибкой, поэтому в случае ошибки скрипт будет прерван. В размещенном вами сценарии вы вообще не просматриваете добавленные элементы и используете неопределенную переменную - eachitem . Также обратите внимание, что при использовании оператора try без части on error будут просто устранены все ошибки, которые также не помогают при отладке. Я знаю, что вы используете один из примеров сценариев Apple, но он довольно старый.

Я обнаружил, что лучший подход при использовании действий с папками - это поместить основные части скрипта за пределы обработчика действий с папками, чтобы его можно было нормально запускать (скрипт не нужно предназначен только для действия с папкой) - это помогает при отладке, а также может дать вам апплет или каплю. Для тестирования вы также можете закомментировать объявление обработчика действия папки и добавить операторы для получения папки и файлов.

Надеюсь, вы не возражаете, но я позволил себе перестроить ваш скрипт, чтобы его можно было запустить из редактора скриптов:

property Docs : "Macintosh HD:Users:Max:Downloads:Docs"
property Music : "Macintosh HD:Users:Max:Downloads:Music"
property Videos : "Macintosh HD:Users:Max:Downloads:Videos"
property Images : "Macintosh HD:Users:Max:Downloads:Images"
property Profiles : "Macintosh HD:Users:Max:Downloads:iPhone:Profiles"
property Zips : "Macintosh HD:Users:Max:Downloads:Zips"
property PSDs : "Macintosh HD:Users:Max:Downloads:PSDs"

property dialogTimeout : 10


on run -- script run as an application or from the Script Editor
    set someFiles to (choose file with multiple selections allowed) -- manually get some files
    tell application "Finder" to set containingFolder to (container of first item of someFiles) as alias
    doStuff(containingFolder, someFiles)
end run


on adding folder items to this_folder after receiving added_items -- folder action handler
    doStuff(this_folder, added_items)
end adding folder items to


on doStuff(theFolder, theStuff) -- do stuff with file items in a folder
    set numberOfItems to (count theStuff)
    tell application "Finder"
        set folderName to name of theFolder
        repeat with anItem in theStuff
            if name extension of anItem is in {"png", "jpg", "jpeg", "gif"} then
                move anItem to folder Images
            else if name extension of anItem is in {"mov", "avi", "wma", "m4v"} then
                move anItem to folder Videos
            else if name extension of anItem is in {"mp4", "mp3", "wav", "wma"} then
                move anItem to folder Music
            else if name extension of anItem is in {"pdf", "doc", "docx", "pages", "ppt", "pptx"} then
                move anItem to folder Docs
            else if name extension of anItem is in {"mobileprovision"} then
                move anItem to folder Profiles
            else if name extension of anItem is in {"zip"} then
                move anItem to folder Zips
            else if name extension of anItem is in {"psd"} then
                move anItem to folder PSDs
            else
                -- no match, so leave it
            end if
        end repeat
    end tell

    -- create the alert string
    set alertText to ("Folder Actions Alert:" & return & return) as Unicode text
    if numberOfItems is greater than 1 then
        set alertText to alertText & numberOfItems & " new items have "
        set plural to "s"
    else
        set alertText to alertText & "One new item has "
        set plural to ""
    end if
    set alertText to alertText & "been added to the folder " & «data utxt201C» & folderName & «data utxt201D» & "."
    set alertText to alertText & return & return & "Would you like to view the added item" & plural & "?"

    display dialog alertText buttons {"Yes", "No"} default button 2 with icon 1 giving up after dialogTimeout

    if (button returned of the result) is "Yes" then tell application "Finder"
        activate
        -- open theFolder
        reveal theStuff
    end tell
end doStuff
0 голосов
/ 28 июля 2011

Скрипты действий с папками не должны запускаться напрямую. Он связан с любым количеством папок через контекстное меню этих папок.

Затем при каждом изменении содержимого этой папки запускается сценарий и запускается обработчик on adding folder items to.

Итак, вам нужно просто щелкнуть правой кнопкой мыши папку, к которой вы хотите прикрепить скрипт, и выбрать пункт меню Set folder action.

Кроме того, вы не должны перезаписывать предоставленный системой файл ... вы можете сохранить свою настроенную версию в своем домашнем каталоге и прикрепить ее к любой папке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...