gpt4 book ai didi

iPhoto 自动化的 AppleScript 语法

转载 作者:行者123 更新时间:2023-12-04 02:33:23 25 4
gpt4 key购买 nike

我一直在通过谷歌四处寻找一些指示,让我通过 AppleScript 在 iPhoto 中做一些我需要做的事情,但到目前为止还没有找到很多。关于各种旧版本 iPhoto 的脚本有各种旧讨论,但没有什么对我需要的特别有帮助。基本上,在伪代码中,我希望这样做:

for each photo in library
if photo.Description contains "a known string"
photo.Description = photo.Description.Replace("a known string", "")
end if
end for

也就是说,我有一段错误的文字,它出现在我图书馆中的每张(几乎每张)照片中。我猜我在过去的某个时候搞砸了批量更改,直到现在才注意到。无论是那个还是从 iPhoto '08 到 '11 的升级都以某种方式做到了。无论哪种方式,最终结果都是一样的。

我不精通 AppleScript,并且在找到正确的语法/词汇表时遇到了麻烦。基本上,我在 tell application "iPhoto"部分,但不知道该说些什么。如果库中照片的组织层次很重要:
  • 每张照片都按时间顺序组织成事件。 (事件是我的主要组织形式。)
  • 有很多专辑,但并非所有专辑都在专辑中。
  • 有一个包含每张错误照片的智能相册。当然,这是基于照片描述中已知字符串的存在。所以我想如果最终代码循环遍历这个智能相册中的照片,可能需要记住这一点,因为智能相册可能会改变正在迭代的数组,不是吗?

  • 有没有人有任何引用资料或示例代码来帮助我前进?相反,有人知道进行这种一次性批量修复的更好方法吗?

    编辑:我使用以下代码进行了测试:
    tell application "iPhoto"
    activate
    set thePhotos to get every photo
    repeat with aPhoto in thePhotos
    if aPhoto's comment contains "[known string]" then
    log aPhoto's comment
    tell aPhoto to set it's comment to text 1 thru (offset of "[known string]" in aPhoto's comment) of aPhoto's comment
    log aPhoto's comment
    exit repeat
    end if
    end repeat
    end tell

    这导致了以下输出:
    tell application "iPhoto"
    activate
    get every photo
    get comment of photo id 4.294977224E+9
    (*comment of photo id 4.294977224E+9*)
    offset of "[known string]" in comment of photo id 4.294977224E+9
    «event ascrgdut»
    offset of "[known string]" in comment of photo id 4.294977224E+9
    end tell
    tell current application
    offset of "[known string]" in «class pcom» of «class ipmr» id 4.294977224E+9
    Result:
    error "iPhoto got an error: Can’t make comment of photo id 4.294977224E+9 into type string." number -1700 from comment of photo id 4.294977224E+9 to string

    编辑:今天早上我有一些时间来修补它,看起来只需要某种类型的类型转换。此代码现在成功更改了它找到的第一张匹配照片:
    tell application "iPhoto"
    activate
    set thePhotos to get every photo
    repeat with aPhoto in thePhotos
    if aPhoto's comment contains "[known string]" then
    log aPhoto's comment as text
    set theComment to aPhoto's comment as text
    set theComment to text 1 thru (offset of "[known string]" in theComment) of theComment
    tell aPhoto to set it's comment to theComment
    log aPhoto's comment as text
    exit repeat
    end if
    end repeat
    end tell

    现在备份我的库并删除 exit repeat .并且可能会在它运行时做一些其他的事情:)

    最佳答案

    这是一个“蛮力”版本。这将遍历 照片。如果需要,您可以通过限制某些专辑来使这更优雅。

    tell application "iPhoto"
    set thePhotos to get every photo
    repeat with aPhoto in thePhotos
    if aPhoto's comment contains "theString" then
    tell aPhoto to set it's comment to "newString"
    end if
    end repeat
    end tell

    关于iPhoto 自动化的 AppleScript 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708418/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com