Google Apps脚本会抛出“我们很抱歉,发生了服务器错误。请稍等一下再试一次。(第13行,文件”代码“)”

时间:2015-03-25 15:13:53

标签: google-apps-script server-error

我正在尝试将Google云端硬盘文件迁移到新域中的新帐户。我以为我已经完成了我的脚本,但是当我尝试测试它时,我不断得到这个非常无益的错误。有谁知道什么样的问题通常会导致这个错误,或者如何解释它?我搜索了SO,但我找不到任何有用的东西。

这是我的剧本:

function copyDrive() {


  var originFolder = DriveApp.getFolderById(originFolderID);
  var destination = DriveApp.getFolderById(destinationID);

  var scriptProperties = PropertiesService.getScriptProperties();
  var lastExecution = scriptProperties.getProperty('LAST_EXECUTION');
  if( lastExecution === null )
    lastExecution = '';

  var fileContinuationToken = scriptProperties.getProperty('FILE_CONTINUATION_TOKEN');
  var fileIterator = fileContinuationToken == null ?
    originFolder.getFiles() : DriveApp.continueFileIterator(fileContinuationToken);
  var folderContinuationToken = scriptProperties.getProperty('FOLDER_CONTINUATION_TOKEN');
  var folderIterator = folderContinuationToken == null ?
    originFolder.getFolders() : DriveApp.continueFolderIterator(folderContinuationToken);

  try { 
    var rootFileName;
    while(fileIterator.hasNext()) {
      var rootFile = fileIterator.next();
      var rootFileDateCreated = formatDate(rootFile.getDateCreated());
      if(rootFileDateCreated < lastExecution) {
        rootFileName = rootFile.getName();
        rootFile.makeCopy(rootFileName, destination);
      }
    }
    var folder = folderIterator.next();
    var folderDateCreated = formatDate(folder.getDateCreated());
    if(folderDateCreated < lastExecution) {
      var folderName = folder.getName();
      var folderCopy = folder.makeCopy(folderName, destination);
    }
    copyFiles(folder, folderCopy);
  } catch(err) {
    Logger.log(err);
  }

  if(fileIterator.hasNext()) {
    scriptProperties.setProperty('FILE_CONTINUATION_TOKEN', fileIterator.getContinuationToken());
  } else {
    scriptProperties.deleteProperty('FILE_CONTINUATION_TOKEN');
  }
  if(folderIterator.hasNext()) {
    scriptProperties.setProperty('FOLDER_CONTINUATION_TOKEN', folderIterator.getContinuationToken());
  } else {
    scriptProperties.deleteProperty('FOLDER_CONTINUATION_TOKEN');
  }
  scriptProperties.setProperty('LAST_EXECUTION', formatDate(new Date()));

};

function formatDate(date) { return Utilities.formatDate(date, "GMT", "yyyy-MM-dd HH:mm:ss"); };

function copyFiles(passedFolder, targetFolder) {
  var fileContents = passedFolder.getFiles();
  var file;
  var fileName;

  while(fileContents.hasNext()) {
    file = fileContents.next();
    fileName = file.getName();
    file.makeCopy(fileName, targetFolder);
  }
  copySubFolders(passedFolder, targetFolder);
};

function copySubFolders(passedFolder, targetFolder) {
  var subFolderContents = passedFolder.getFolders();
  var subFolder;
  var subFolderName;

  while(folderContents.hasNext()) {
    subFolder = subFolderContents.next();
    subFolderName = subFolder.getName();
    var subFolderCopy = targetFolder.createFolder(folderName);
    copyFiles(subFolder, subFolderCopy);
  }
};

我在这一行得到错误:

  var fileIterator = fileContinuationToken == null ? originFolder.getFiles() : DriveApp.continueFileIterator(fileContinuationToken);

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我通过手动删除脚本属性解决了这个问题。在这样做后,我不再得到错误,但最后保存的延续令牌与开头加载的令牌相同。