掌握 Photoshop 脚本 Folder 对象:批量处理文件的利器

在 Photoshop 的 JavaScript 脚本(ExtendScript)中,Folder 对象是一个核心工具,用于处理文件系统中的文件夹操作。它提供了对文件夹的创建、检查、遍历、文件筛选等功能,是自动化批量处理任务的重要基础。以下是 Folder 对象的详细介绍:


1. 创建 Folder 对象

语法

javascript 复制代码
var folder = new Folder("文件夹路径");
  • 路径 :可以是绝对路径(如 "C:/Users/YourName/Desktop")或相对路径(如 "~/Desktop")。

  • 示例

    javascript 复制代码
    var myFolder = new Folder("C:/Projects/MyImages");

2. 常用方法

(1)创建文件夹
  • 方法folder.create()

  • 描述 :在指定路径创建文件夹,若文件夹已存在则返回 false

  • 示例

    javascript 复制代码
    var folderPath = "C:/Projects/NewFolder";
    var folder = new Folder(folderPath);
    if (!folder.exists) {
        folder.create();
        $.writeln("文件夹创建成功:" + folderPath);
    } else {
        $.writeln("文件夹已存在:" + folderPath);
    }
(2)检查文件夹是否存在
  • 属性folder.exists

  • 描述 :返回布尔值,true 表示文件夹存在,false 表示不存在。

  • 示例

    javascript 复制代码
    var folder = new Folder("C:/Projects/MyImages");
    if (folder.exists) {
        $.writeln("文件夹存在");
    } else {
        $.writeln("文件夹不存在");
    }
(3)获取文件夹中的文件
  • 方法folder.getFiles()
  • 描述:返回文件夹中所有文件和子文件夹的数组。
  • 过滤文件
    • 结合 Array.filter() 筛选特定类型的文件。

    • 示例 :获取所有 .jpg 文件:

      javascript 复制代码
      var folder = new Folder("C:/Projects/MyImages");
      var files = folder.getFiles().filter(function(file) {
          return file instanceof File && /\.(jpg|jpeg)$/i.test(file.name);
      });
      files.forEach(function(file) {
          $.writeln("找到文件:" + file.name);
      });
(4)递归遍历子文件夹
  • 示例 :遍历文件夹及其子文件夹中的所有文件:

    javascript 复制代码
    function traverseFolder(folder) {
        var files = folder.getFiles();
        for (var i = 0; i < files.length; i++) {
            if (files[i] instanceof Folder) {
                traverseFolder(files[i]); // 递归子文件夹
            } else if (files[i] instanceof File) {
                $.writeln("文件:" + files[i].fsName);
            }
        }
    }
    var rootFolder = new Folder("C:/Projects");
    traverseFolder(rootFolder);
(5)删除文件夹
  • 方法folder.remove()

  • 描述:删除文件夹及其所有内容,需谨慎使用。

  • 示例

    javascript 复制代码
    var folder = new Folder("C:/Projects/TempFolder");
    if (folder.exists) {
        folder.remove();
        $.writeln("文件夹已删除");
    }

3. 常用属性

属性 描述
exists 返回布尔值,表示文件夹是否存在。
fsName 返回文件夹的完整路径(字符串)。
name 返回文件夹的名称(不包含路径)。
parent 返回父文件夹的 Folder 对象。

4. 典型应用场景

  1. 批量处理文件

    • 遍历文件夹中的所有图像文件,进行统一调整(如调整大小、格式转换)。

    • 示例 :批量调整图像大小:

      javascript 复制代码
      var folder = Folder.selectDialog("选择图片文件夹");
      if (folder) {
          var files = folder.getFiles(/\.(jpg|png)$/i);
          for (var i = 0; i < files.length; i++) {
              var doc = app.open(files[i]);
              doc.resizeImage(800, 600);
              doc.saveAs(new File(files[i].parent + "/" + files[i].name.replace(/\.\w+$/, "_resized.jpg")));
              doc.close(SaveOptions.DONOTSAVECHANGES);
          }
      }
  2. 自动化项目结构

    • 创建项目所需的文件夹结构(如 源文件输出备份)。

    • 示例

      javascript 复制代码
      var baseFolder = new Folder("C:/Projects/MyProject");
      if (!baseFolder.exists) {
          baseFolder.create();
          ["源文件", "输出", "备份"].forEach(function(name) {
              new Folder(baseFolder.fsName + "/" + name).create();
          });
          $.writeln("项目结构创建完成");
      }
  3. 文件备份与归档

    • 将特定文件复制到备份文件夹。

5. 注意事项

  1. 路径格式

    • Windows 路径使用反斜杠(\\)或正斜杠(/)。
    • macOS 路径使用正斜杠(/)。
  2. 权限问题

    • 确保脚本有权限访问目标文件夹,否则会抛出错误。
  3. 错误处理

    • 使用 try-catch 捕获异常,避免脚本中断。

    • 示例

      javascript 复制代码
      try {
          var folder = new Folder("C:/InvalidPath");
          folder.create();
      } catch (e) {
          $.writeln("错误:" + e.message);
      }

6. 扩展功能

  • 结合 File 对象
    • FolderFile 对象通常配合使用,实现完整的文件系统操作。
  • 结合 Photoshop API
    • 在脚本中调用 Photoshop 功能(如打开文件、保存文件),实现自动化图像处理。

总结

Folder 对象是 Photoshop JavaScript 脚本中处理文件夹的核心工具,提供了丰富的属性和方法,支持文件夹的创建、检查、遍历、文件筛选等操作。通过结合 File 对象和 Photoshop API,开发者可以实现高度自动化的批量处理任务,大幅提升工作效率。

相关推荐
雨季66612 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
北极糊的狐15 小时前
光标放在引入的xxx组件行(import { xxx } from ‘element-ui‘;)出现标黄,显示报错:无法解析符号 ‘xxx‘ 解决办法
ui
子春一16 小时前
Flutter for OpenHarmony:构建一个 Flutter 习惯打卡应用,深入解析周视图交互、连续打卡逻辑与状态驱动 UI
flutter·ui·交互
我的xiaodoujiao17 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 44--将自动化测试结果自动推送至钉钉工作群聊
前端·python·测试工具·ui·pytest
UI设计兰亭妙微19 小时前
UI 设计新范式:从国际案例看体验与商业的融合之道
人工智能·ui·b端设计
子春一19 小时前
Flutter for OpenHarmony:构建一个 Flutter 天气卡片组件,深入解析动态 UI、响应式布局与语义化设计
javascript·flutter·ui
雨季66619 小时前
Flutter 三端应用实战:OpenHarmony “极简文本行数统计器”
开发语言·前端·flutter·ui·交互
布兰妮甜19 小时前
Photoshop中通过图层混合模式实现图像元素透明度渐变过渡的完整指南
人工智能·ui·生活·photoshop·文化
AIGCmitutu19 小时前
Photoshop抠图插件2026选择指南,Ps抠图插件哪个好用?
人工智能·ui·ai绘画·photoshop·ps
雨季66619 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态字体大小调节器”交互模式深度解析
开发语言·flutter·ui·交互·dart