1

早上好,

我正在尝试编写一个可以运行的 AppleScript,它将我桌面上的所有文件发送到 Evernote,然后删除这些文件。我迄今为止的代码是:

on run {input}

tell application "Finder"
    select every file of desktop
end tell

tell application "Evernote"
    repeat with SelectedFile in input
        try
            create note from file SelectedFile notebook "Auto Import"
        end try

    end repeat

end tell

tell application "Finder"
    delete every file of desktop
end tell

end run

如果我运行它,那么第一个和最后一个“告诉”工作正常(即脚本突出显示然后删除桌面上的所有文件),但中间的“告诉”没有做任何事情。

但是,如果我手动突出显示桌面上的所有文件,然后只运行中间的“告诉”,那么它会很好地导入 - 每个项目都按预期放入单独的注释中。

如您所知,我是 AppleScript 的新手——我怀疑我需要将选定的文件放在某种数组中,但无法弄清楚。帮助!

非常感谢

富有的

4

2 回答 2

3

你的代码失败了,因为你的变量和通过 Finder 选择的文件之间没有关系input——这意味着你的列表是空的,Evernote 根本没有处理任何东西。您通过将 Evernote 导入命令包装在一个try块中而不进行任何错误处理来混淆了问题,这意味着所有错误都不会被注意到(为避免此类问题,最好始终在on error子句中记录错误消息,如果没有别的)。

此外,您实际上不需要通过 AppleScript 选择桌面上的文件来处理它们。以下代码将抓取所有可见文件(不包括包/应用程序等伪文件):

tell application "System Events"
    set desktopFiles to every disk item of (desktop folder of user domain) whose visible is true and class is file
end tell

将您以这种方式检索到的列表传递给 Evernote 进行处理:

repeat with aFile in desktopFiles as list
    try
        tell application "Evernote" to create note from file (aFile as alias) notebook "Auto Import"
        tell application "System Events" to delete aFile
    on error errorMessage
        log errorMessage
    end try
end repeat

你很高兴。

请注意,通过明智地放置删除命令(紧跟在导入命令之后,在 try 块内,在所有文件的循环内),您可以确保仅在 Evernote 在导入时没有错误时才调用它,同时避免遍历文件几次。

tell最后一点:如果只有一个命令要执行,则不必对语句使用块语法——使用tell <target> to <command>更容易,并且会让你远离嵌套的上下文地狱。

感谢@adayzone 对列表处理和别名强制的更正

于 2012-04-27T23:37:54.230 回答
1

尝试

tell application "System Events" to set xxx to get every file of (desktop folder of user domain) whose visible is true

repeat with i from 1 to count of xxx
    set SelectedFile to item i of xxx as alias
    try
        tell application "Evernote" to create note from file SelectedFile notebook "Auto Import"
        tell application "Finder" to delete SelectedFile
    end try
end repeat

谢谢@fanaugen

于 2012-04-27T11:35:24.350 回答