You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AppleScript制作拖放工具生成不含.DS_Store的PC兼容压缩包?

实现兼容PC的拖放式压缩AppleScript工具

需求概述

需要制作一个支持拖放操作的AppleScript工具,将文件/文件夹压缩为zip包,同时自动排除.DS_Store和__MACOSX文件,避免PC端接收时出现无法保存或解压的问题。

原代码问题分析

原代码的核心问题在于两次do shell script是独立执行的,cd命令切换的目录环境不会延续到下一条zip命令,导致zip命令没有在目标目录下执行,自然无法正确打包内容。此外,路径处理逻辑也未完全适配文件和文件夹的不同情况。

修复后的完整代码

on run {input, parameters}
    repeat with anItem in input
        fileZipper(anItem)
    end repeat
end run

on fileZipper(thisItem)
    -- 处理文件/文件夹的路径转换
    set itemPath to POSIX path of thisItem
    set itemName to name of (info for thisItem)
    
    -- 判断是文件还是文件夹,确定压缩包路径和打包目标
    if folder of (info for thisItem) then
        set zipFilePath to itemPath & ".zip"
        -- 合并cd和zip命令,确保在目标目录执行打包,排除指定文件
        do shell script "cd " & quoted form of itemPath & " && /usr/bin/zip -r " & quoted form of zipFilePath & " . -x \"**/.DS_Store\" -x \"__MACOSX\" -x \"__MACOSX/**\""
    else
        set parentPath to POSIX path of (container of thisItem as alias)
        set zipFilePath to parentPath & itemName & ".zip"
        do shell script "/usr/bin/zip -j " & quoted form of zipFilePath & " " & quoted form of itemPath & " -x \"**/.DS_Store\""
    end if
    
    return POSIX file zipFilePath as alias
end fileZipper

关键优化点

  • 合并Shell命令:用&&将cd和zip命令合并为一条,确保zip命令在目标目录环境下执行,解决原代码中环境不延续的问题。
  • 适配文件/文件夹:分别处理拖入的文件和文件夹,文件夹打包时保留内部结构(用.代替*更可靠),文件打包时使用-j参数避免多余层级(可根据需求调整)。
  • 精准排除规则:
    • "**/.DS_Store":匹配所有层级目录下的.DS_Store文件
    • "__MACOSX"和"__MACOSX/**":彻底排除整个__MACOSX目录及其内部内容
  • 多项目支持:添加循环处理,支持一次性拖入多个文件/文件夹进行批量压缩。

使用方法

  1. 打开「脚本编辑器」,粘贴上述代码
  2. 点击菜单栏「文件」→「导出」,格式选择「应用程序」,按需勾选「显示启动屏幕」
  3. 将制作好的应用程序拖到Dock或桌面,以后直接把文件/文件夹拖到该应用图标上即可生成干净的zip包

内容的提问来源于stack exchange,提问作者MisterMike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:52:23