Google Apps脚本:保存共享文件夹的副本

时间:2016-02-17 05:36:05

标签: google-apps-script

在Google文档中,“添加到云端硬盘”不会将文件夹保存到一个驱动器,它只是添加了一个指向用户驱动器的链接。无论何时在一侧进行更改,都可以很容易地反映在另一侧。它包括删除和更新文件。

我想将文件夹的副本保存到“我的云端硬盘”(如果可以为特定的用户组完成,则更好),以便将其与共享它的人员的副本隔离。以下功能列出了所有文件夹sharedWithMe

function SearchAndSave() {
  var folders = DriveApp.searchFolders('sharedWithMe');
  while (folders.hasNext()) {
   var folder = folders.next();
   Logger.log(folder.getName()); 

 }
}

我想到了makeCopy()makeCopy()适用于文件。它也适用于文件夹吗?

2 个答案:

答案 0 :(得分:0)

最后得到了脚本工作。虽然有点粗糙。只是盲目地克隆与我共享的所有文件夹。

function start() {

   var folders = DriveApp.searchFolders('sharedWithMe');
   while (folders.hasNext()) {
   var sourceFolder = folders.next();
   var targetFolder = 'Copy of ' + sourceFolder;
   Logger.log(sourceFolder);
   Logger.log(targetFolder);

  var source = DriveApp.getFoldersByName(sourceFolder);
  var target = DriveApp.createFolder(targetFolder);

  if (source.hasNext()) {
    copyFolder(source.next(), 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);
  }  

}

只有一个问题,如果脚本以大量共享文件夹终止Execution failed: Exceeded maximum execution time [362.575 seconds total runtime]。如果您有任何想法,请提出建议。

答案 1 :(得分:0)

只是补充一下 Gustavo Rodrigues 的帖子,他做了很大的修改,但我会说我注意到它导致的失败比我以前使用其他脚本时遇到的失败要多。在我比较之后,我注意到他将 file.getName() 抛出到 var fileName 中。然后在以下位置调用该变量:

    file.makeCopy(fileName, target);

这对我驱动器上的大部分内容都有效,但由于某种原因,它导致了很多错误。为了解决这个问题,我需要将其替换为:

    file.makeCopy(file.getName(), target);

老实说,我不确定为什么或如何...但是如果您有答案,我会全神贯注。只要知道替换变量似乎工作得更好,并且在我们说话时仍然对我有效。

谢谢!