如何遍历子文件夹查找指定文件并加载到Photoshop活动文档
Photoshop 递归遍历子文件夹匹配文件并导入活动文档实现方案
实现说明
脚本基于Photoshop原生支持的ExtendScript语法编写,兼容CS6及以上全版本Photoshop,无需额外安装插件。核心能力覆盖需求:
- 运行时手动选择父级根目录,自动递归遍历目录下所有层级的不固定名称子文件夹,无需提前配置子文件夹路径
- 内置可自定义的文件名匹配规则,默认适配
[尺寸宽]x[尺寸高]_F[序号].jpg命名格式 - 匹配到的文件会自动导入到当前打开的活动文档中,导入逻辑可自定义调整
完整脚本代码
将以下代码保存为后缀为.jsx的文件即可在Photoshop中调用:
// 校验当前是否存在活动文档 if (app.documents.length === 0) { alert("请先打开需要导入素材的目标文档后再运行脚本"); throw new Error("无活动文档"); } var activeDoc = app.activeDocument; // 选择待遍历的父级文件夹 var rootFolder = Folder.selectDialog("请选择包含所有子文件夹的父级目录"); if (rootFolder == null) { // 用户取消选择则直接退出 exit(); } // 文件名匹配正则,可根据需求自行修改 // 当前规则:匹配 数字x数字_F数字.jpg 格式,不区分大小写 var fileMatchReg = /^\d+x\d+_F\d+\.jpg$/i; /** * 递归遍历文件夹处理匹配文件 * @param {Folder} folder 要遍历的文件夹对象 */ function traverseFolder(folder) { var allFiles = folder.getFiles(); for (var i = 0; i < allFiles.length; i++) { var currentItem = allFiles[i]; if (currentItem instanceof Folder) { // 是子文件夹则递归遍历 traverseFolder(currentItem); } else { // 是文件则校验命名规则 if (fileMatchReg.test(currentItem.name)) { // 匹配成功,导入到当前活动文档(默认导入为智能对象,可修改) try { activeDoc.place(new File(currentItem.fsName)); // 可选:导入后自动对齐到画布中心,不需要可注释掉下一行 activeDoc.activeLayer.translate( (activeDoc.width.as("px") - activeDoc.activeLayer.bounds[2].as("px"))/2, (activeDoc.height.as("px") - activeDoc.activeLayer.bounds[3].as("px"))/2 ); } catch(e) { alert("导入文件失败:" + currentItem.fsName + "\n错误信息:" + e.message); } } } } } // 执行遍历 traverseFolder(rootFolder); alert("所有匹配文件导入完成");
使用方法
- 提前打开需要导入素材的目标PS文档
- 点击Photoshop顶部菜单:
文件 > 脚本 > 浏览,选中刚才保存的.jsx脚本文件 - 在弹出的目录选择框中,选中存放所有子文件夹的父级根目录,点击确认
- 等待脚本自动执行,完成后会弹出完成提示,所有符合命名规则的文件已导入到当前文档中
自定义修改指引
- 调整文件匹配规则:找到代码中
var fileMatchReg = /^\d+x\d+_F\d+\.jpg$/i;行,替换为需要的正则规则即可。比如需要同时匹配png格式素材,可修改为/^\d+x\d+_F\d+\.(jpg|png)$/i - 调整导入方式:当前默认调用
place()方法导入为智能对象,如果需要导入为扁平化普通图层,可替换为打开文件后复制粘贴到活动文档的逻辑 - 调整导入位置:当前默认导入后自动对齐到画布中心,不需要该功能直接注释掉对应
translate方法的代码段即可
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

