我刚编辑了/ Macintosh HD / Library / Scripts / Folder Actions ... /文件夹中的文件new item alert.scpt
。我在编辑了一些权限后设法保存了它,但是当我点击Run
或Compile
时没有任何反应。
这是一个常见的错误,或者如果有人不介意看看我的AppleScript中是否有问题。
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
答案 0 :(得分:0)
文件夹操作脚本不应该直接运行。它通过这些文件夹的上下文菜单与任意数量的文件夹相关联。
然后,只要该文件夹的内容发生更改,就会触发脚本,并运行on adding folder items to
处理程序。
因此,您应该右键单击要附加脚本的文件夹,然后选择Set folder action
菜单项。
此外,您不应该覆盖系统提供的文件...您可以将自定义版本保存在自己的主目录中,然后将其附加到任何文件夹。
答案 1 :(得分:0)
文件夹操作处理程序将以静默方式失败,因此如果出现错误,脚本将中止。在您发布的脚本中,您根本不会查看添加的项目,而是使用未定义的变量 - eachitem 。另请注意,使用尝试语句时,如果没有错误部分,则只会吃掉任何和所有错误,这对调试也没有帮助。我知道你正在使用Apple的一个示例脚本,但那件事情已经很久了。
我发现使用文件夹操作时最好的方法是将脚本的主要部分放在文件夹操作处理程序之外,这样它也可以正常运行(脚本不需要是致力于成为一个文件夹动作) - 这有助于调试,也可以为您提供applet或Droplet。对于测试,您还可以注释掉文件夹操作处理程序声明并添加语句以获取文件夹和文件。
我希望你不介意,但我冒昧地重新安排你的脚本,以便它也可以从脚本编辑器运行:
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