Google Apps脚本的执行超时

时间:2017-01-16 02:49:00

标签: javascript google-apps-script

我目前正在编写一个脚本,将文件夹及其所有子文件夹和一个非常大的目录的文件从Google云端硬盘中的一个位置复制到另一个位置。这被用于我所雇用的公司的归档目的。

我的问题是,我试图存档的文件的大小和数量太大,无法在Google提供的5分钟执行时间内处理。我试图将此脚本保留为独立的Web应用程序,但我很乐意根据需要对其进行扩展。

我的第二个问题是我需要脚本一遍又一遍地运行,直到文件夹被复制,但一旦完成,我需要它停止。我本来打算使用触发器,但是基于时间的触发器不适合我想要完成的任务。

简而言之,我需要运行脚本直到任务完成,自动重启,并避免执行时错误。

完整的代码包含在下面。

//Global Variables
var classroomFolderName = "Classroom";
var archiveFolderName = "Archive";

function doGet(){
  var classroomFolder = DriveApp.getFoldersByName(classroomFolderName).next();
  var archiveFolder = DriveApp.getFoldersByName(archiveFolderName).next();

  start(archiveFolder);
}

function getFolder(folderName){
  var foldercount = 0;
  //Selects all folders named exactally as parameter is given
  var folder = DriveApp.getFoldersByName(folderName);
  while (folder.hasNext()) {
    var folders = folder.next();
    foldercount++;
  }

  //Throws errors if number of folders != 1
  if (foldercount < 1){
    throw 1;
  }

  else if (foldercount > 1){
    throw 2;
  }

  else{
    return folder;
  }
}

function start(archiveFolder) {

  var sourceFolder = classroomFolderName;
  var targetFolder = "New Archive";

  var source = DriveApp.getFoldersByName(sourceFolder);
  var target = archiveFolder.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);
  }  

}

1 个答案:

答案 0 :(得分:-1)

这是我遇到的事情 - 你可能会发现它有一些价值 -

https://ctrlq.org/code/20016-maximum-execution-time-limit