繁体   English   中英

谷歌应用脚本将所有数据从一个文件夹复制到另一个文件夹并防止脚本复制已经存在的文件

[英]Google apps script to copy all data from a folder to another folder and prevent script copy files that already exist

我的 Google Drive 帐户中有两个文件夹; 假设文件夹 1 和文件夹 2。我会将文件夹 1 中的所有文件和文件夹复制到文件夹 2,但如果文件夹 2 中已经存在,则不应复制。 这是脚本,但是当它运行时,它总是将文件夹 1 中的所有可用数据复制到文件夹 2:

function copyTo() {
  var sourceFolder = "id1";
  var targetFolder = "id2";
  
  var source = DriveApp.getFolderById(sourceFolder);
  var target = DriveApp.getFolderById(targetFolder);
  copyFolder(source, target);
}

function copyFolder(source, target) {
  var folders = source.getFolders();
  var files = source.getFiles();
  
  while(files.hasNext()){
  var file = files.next();
  file.makeCopy(file.getName(), target);
  }
  
  while(folders.hasNext()){
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var targetFolder = target.createFolder(folderName);
    copyFolder(subFolder, targetFolder);
  }
}

您需要在目标文件夹中创建文件和文件夹列表,并根据列表检查要复制的文件的名称。

  function copyTo() {
    var sourceFolder = "id1";
    var targetFolder = "id2";


    var source = DriveApp.getFolderById(sourceFolder);
    var target = DriveApp.getFolderById(targetFolder);

    copyFolder(source, target);
  }

  function copyFolder(source, target) {
    var folderNames = existingFiles(target);
    var folders = source.getFolders();
    var files = source.getFiles();

    while (files.hasNext()) {
      var file = files.next();
      if (folderNames.files.indexOf(file.getName()) > -1) {
        file.makeCopy(file.getName(), target);
      }
    }

    while (folders.hasNext()) {
      var subFolder = folders.next();
      var folderName = subFolder.getName();
      if (folderNames.files.indexOf(folderName) > -1)
        var targetFolder = target.createFolder(folderName);
      copyFolder(subFolder, targetFolder);

    }
  }

  function existingFiles(folder) {
    var names = {
      files: [],
      folders: []
    };
    var folders = folder.getFolders();
    var files = folder.getFiles();

    while (files.hasNext()) {
      var file = files.next();
      names.files.push(file.getName());
    }

    while (folders.hasNext()) {
      var subFolder = folders.next();
      name.folder.push(subFolder.getName());
    }
    return names;
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM