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

如何在Automator中使用JavaScript获取输入文件夹及其包含的文件

解决方案

方案1:纯JS实现(无需额外Automator操作,更灵活)

直接删除原流程中的「Get Folder Contents」步骤,仅保留「接收Finder选中项」+「Run JavaScript」两个操作即可,通过JXA(JavaScript for Automation)原生API可直接同时获取文件夹属性和内部内容:

function run(input, parameters) {
    const Finder = Application('Finder');
    // 取第一个选中的文件夹对象
    const targetFolder = input[0];
    // 直接获取文件夹名称,无需路径截取
    const folderName = targetFolder.name();
    // 读取文件夹内部内容,添加 entireContents: true 可递归读取所有子层级文件
    const folderItems = Finder.items.byPath(targetFolder.toString()).items();
    // 提取文件名示例
    const fileNames = folderItems.map(item => item.name());

    // 此处编写你的业务逻辑
    console.log('文件夹名称:', folderName);
    console.log('内部文件列表:', fileNames);
    
    // 按需返回结果给后续工作流步骤
    return {
        folderName,
        files: folderItems
    }
}

方案2:保留原有「Get Folder Contents」步骤

如果你不想修改原有流程结构,可以通过工作流变量同时保存文件夹对象和文件列表:

  1. 原流程第一步保持不变,接收Finder选中的第一个文件夹
  2. 新增「Set Value of Variable」操作,自定义变量名为 targetFolder
  3. 后续保留「Get Folder Contents」操作和你原有的JS步骤
  4. 在JS代码中直接读取保存的变量即可拿到文件夹属性:
function run(input, parameters) {
    // 读取工作流中保存的文件夹变量
    const targetFolder = Automator.variables['targetFolder'].value();
    const folderName = targetFolder.name();
    // input 就是 Get Folder Contents 返回的所有文件
    const files = input.map(file => file.toString().replace(/.*\//,''));

    // 此处编写你的业务逻辑
    return {folderName, files}
}

两种方案均无需通过路径截取推导文件夹名称,你可以根据自己的使用习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:24:01