打开非法 pptx 文件后 AppleScript Keynote 挂断

AppleScript Keynote hangup after opening a illegal pptx file

首先,我是一名初级 AppleScript 开发人员。我已经搜索了这个问题很长时间但没有找到结果。我有一个 AppleScript 可以将 ppt 文件转换为 pdf 格式。但是脚本在匹配到错误的ppt文件后会挂起

script/keynote 将弹出一个对话框,显示“xxx.ppt 现在无法打开”“文件格式无效”。

有什么办法可以防止keynote弹出这种对话框吗?

下面是示例代码,文件是一个图像文件,但我将扩展名更改为 pptx 以模拟非法文件:

set thefile to POSIX file "/Users/dazhangluo/Downloads/brain-storming.pptx"
tell application "Keynote"
    activate
    try
        set thedoc to open thefile

        --display dialog class of thedoc
    on error errMessage
        --display dialog errMessage
        log errorMessage
    end try
end tell

有一个名为 exiftool 的命令行工具可以检查文件并获取其元数据,包括 'file type' 标记(使用 -filetype)。有多种安装方法†。与 'mdls' 不同,它不容易被文件扩展名所迷惑。如果你 运行 它在 pptx 文件中,它会在结果中包含这个:

File Type                       : PPTX

然后你就可以抢最后一个词来测试了。此脚本将循环遍历指定文件夹中的文件,使用 exiftool 提取其文件类型,然后将任何匹配文件的别名复制到新列表中。然后它会在 keynote 中打开每个文件。我的 keynote (v8) 版本不允许我用 powerpoint 文档编写任何脚本,所以你只能靠自己了。

set srcFol to (path to desktop as text) & "presentations" as alias
-- or if you prefer…
-- set srcFol to choose folder 

tell application "Finder"
    
    set fList to files of srcFol as alias list
    set cleanList to {}
    repeat with f in fList
        set ppFile to POSIX path of f
        set qfFile to quoted form of ppFile
        tell me to set exifData to do shell script "/usr/local/bin/exiftool -filetype " & qfFile
        if last word of exifData is "PPTX" then
            set end of cleanList to contents of f
            --> alias "Mac:Users:username:Desktop:presentations:powerpoint1.pptx"
        end if
    end repeat
end tell

tell application "Keynote"
    activate
    repeat with pptxFile in cleanList
        open pptxFile
        -- do whatever
    end repeat
end tell

注意 † 根据 exiftool 的安装位置,您可能需要更改路径,您可以使用 which exiftool.