如何在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」步骤
如果你不想修改原有流程结构,可以通过工作流变量同时保存文件夹对象和文件列表:
- 原流程第一步保持不变,接收Finder选中的第一个文件夹
- 新增「Set Value of Variable」操作,自定义变量名为
targetFolder - 后续保留「Get Folder Contents」操作和你原有的JS步骤
- 在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
相关产品推荐
相关产品推荐

