【问题标题】:How to clone/copy a folder that contains subfolders & files to another folder with (Adobe ExtendScript)如何使用(Adobe ExtendScript)克隆/复制包含子文件夹和文件的文件夹到另一个文件夹
【发布时间】:2021-06-18 12:16:44
【问题描述】:

我正在构建一个 photoshop 扩展,我想将一个文件夹克隆到 adobe 文件系统中的另一个文件夹(myDocuments 或 userData),我使用 .copy() 方法,但这个方法只复制文件,而不是子文件夹,这是源文件夹和目标文件夹的结构:enter image description here

这是我在 JSX 文件中的基本代码:

function Copier() {
  var src = "~/Desktop/main";
  var dest = "~/Desktop/Dest";

  if (src.exists) {
    var files = src.getFiles()
    for (var i = 0; i < files.length; i++) {
      files[i].copy(dest);
    }
  } else {
    return false;
  }
}

【问题讨论】:

  • Sergey 的解决方案应该有效。但是,如果您需要保留文件的日期,您可以使用 file.execute() 函数或从 Extendscript 运行系统 appleScript:stackoverflow.com/a/14445125/14265469

标签: jsx adobe extendscript photoshop-script


【解决方案1】:

Bu 使用递归函数为每个文件夹创建文件夹并为每个文件复制文件。这是我使用的函数:

copyFolderContents({
  source: "/path/to/source",
  target: "/path/to/target",
  supressAlerts: true,
})

function copyFolderContents(data)
  {
    if (data.source.constructor != Folder) data.source = new Folder(data.source);
    if (data.target.constructor != Folder) data.target = new Folder(data.target);
    if (data.supressAlerts == undefined) data.supressAlerts = false
    var errors = false;

    copyFolder(data.source, data.target)

    function copyFolder(sourceFolder, destinationFolder)
    {
      var sourceChildrenArr = sourceFolder.getFiles();
      for (var i = 0; i < sourceChildrenArr.length; i++)
      {
        var sourceChild = sourceChildrenArr[i];
        var destinationChildStr = destinationFolder.fsName + "/" + sourceChild.name;
        if (sourceChild instanceof File)
        {
          copyFile(sourceChild, new File(destinationChildStr));
        }
        else
        {
          copyFolder(sourceChild, new Folder(destinationChildStr));
        }
      }
    }

    function copyFile(sourceFile, destinationFile)
    {
      createFolder(destinationFile.parent);
      if (!sourceFile.copy(destinationFile))
      {
        if (!data.supressAlerts)
        {
          alert('Unable to copy\n' + sourceFile + '\nto\n' + destinationFile + '\nAborting.');
          errors = true;
          return false;
        }
      };
    }

    function createFolder(folder)
    {
      if (folder.parent !== null && !folder.parent.exists)
      {
        createFolder(folder.parent);
      }
      if (!folder.create())
      {
        alert('Unable to create:\n' + folder + "\nAborting.");
        errors = true;
        return false;
      };
    }
    if (errors)
    {
      return false;
    }
    else
    {
      return true;
    }
  }

【讨论】:

    猜你喜欢
    • 2022-10-25
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多