如何延长脚本执行时间?

我有这个脚本来删除._*我的谷歌驱动器中的所有文件。但是有数百万个文件,脚本在 5 分钟左右后退出,并显示“超出最大执行时间”。

function TrashDotFiles() {
  var files = DriveApp.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    var name = file.getName();
    if (name.indexOf("._")==0) {
      console.log(name + " • trashed");
      file.setTrashed(true)
    }
  }
}

我怎样才能让这个脚本运行足够长的时间来扫描整个驱动器?

科斯

一种可能的解决方法是在没有运行时间限制的模态窗口中运行纯 JavaScript 代码:

function onOpen()
{
  var ui = SpreadsheetApp.getUi();

  ui.createMenu('Trash dot files')
      .addItem('Run', 'openWindow')
      .addToUi();
}

function openWindow()
{
  var ui = SpreadsheetApp.getUi();

  // get template
  var template = HtmlService.createTemplateFromFile('deleteDriveFiles');

  // need to have next line of text somewhere (even commented out) to trigger correct scopes for script and token:
  // DriveApp.getFiles()

  // pass token
  template.data = {
    token: ScriptApp.getOAuthToken()
  };

  // get output html
  var html = template.evaluate();

  // show modal window
  ui.showModalDialog(html, 'Delete files from Drive');
}

[文件 - 新建 - Html 文件] deleteDriveFiles.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
  <script>

  // used for visual log
  function addParagraph(text)
  {
    var node = document.createElement('p');
    node.innerText = text;
    document.body.appendChild(node);
  }

  // for stats
  var totalProcessed = 0;
  var totalTrashed = 0;

  function reqListener(){
    // get response obj
    var res = JSON.parse(this.responseText);

    if (res.items && res.items.length)
    {
      // loop files
      for (var i = 0; i < res.items.length; i++)
      {
        var file = res.items[i];

        // delete file
        if (file.title.indexOf('._') == 0)
        {
          var xhr = new XMLHttpRequest();
          xhr.addEventListener('load', function(){
            // get response obj
            var res = JSON.parse(this.responseText);

            // sucessfully trashed
            if (this.status == 200)
            {
              totalTrashed++;
              addParagraph('Trashed '+res.title);
            }
          }.bind(xhr));
          xhr.open('POST', 'https://www.googleapis.com/drive/v2/files/'+file.id+'/trash');
          xhr.setRequestHeader('Authorization', 'Bearer <?=data.token?>');
          xhr.send();
        }
      }

      // for stats
      totalProcessed += res.items.length;
    }

    // get next page of results
    if (res.nextPageToken)
    {
      var xhr = new XMLHttpRequest();
      xhr.addEventListener('load', reqListener);
      xhr.open('GET', 'https://www.googleapis.com/drive/v2/files?trashed=false&pageToken='+res.nextPageToken);
      xhr.setRequestHeader('Authorization', 'Bearer <?=data.token?>');
      xhr.send();
    }
    // finished
    else
    {
      addParagraph('Finished. Processed total: '+totalProcessed+'. Trashed total: '+totalTrashed);
    }
  }

  var xhr = new XMLHttpRequest();
  xhr.addEventListener('load', reqListener);
  xhr.open('GET', 'https://www.googleapis.com/drive/v2/files?trashed=false');
  xhr.setRequestHeader('Authorization', 'Bearer <?=data.token?>');
  xhr.send();

  </script>
  </body>
</html>

保存代码更改并刷新电子表格网页后,您将看到新的菜单项:

在此处输入图片说明

单击运行开始处理文件。

结果:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何使用FormApp ... getResponses()减少脚本执行时间?

来自分类Dev

如何在Yii中记录脚本的执行时间?

来自分类Dev

如何使用FormApp ... getResponses()减少脚本执行时间?

来自分类Dev

测量python脚本的执行时间

来自分类Dev

测量脚本执行时间

来自分类Dev

缩短PowerShell脚本的执行时间

来自分类Dev

脚本超过最大执行时间

来自分类Dev

执行时间

来自分类Dev

葫芦如何加快执行时间

来自分类Dev

如何减少查询执行时间

来自分类Dev

如何跟踪执行时间?

来自分类Dev

如何减少执行时间

来自分类Dev

如何计算执行时间(加速)

来自分类Dev

如何减少执行时间

来自分类Dev

葫芦如何加快执行时间

来自分类Dev

如何减少执行时间

来自分类Dev

如何减少查询执行时间

来自分类Dev

如何提高查询执行时间?

来自分类Dev

如何减少视图的执行时间?

来自分类Dev

如果程序执行时间超过x秒,如何执行脚本

来自分类Dev

要从脚本打印脚本的执行时间?

来自分类Dev

R-使脚本每X分钟运行一次,而不管执行时间如何。

来自分类Dev

如何检查启动后台进程的bash脚本的执行时间

来自分类Dev

如何每天仅使用cron运行一次脚本而不指定执行时间

来自分类Dev

如何在PyCharm中计时脚本执行时间而不每次都添加代码?

来自分类Dev

如何获取正在运行但在后台运行的特定脚本的执行时间?

来自分类Dev

如何每天仅使用cron运行一次脚本而不指定执行时间

来自分类Dev

如何有效地获得脚本的执行时间?

来自分类Dev

管道脚本 - 如何检查作业执行时间是否超过某个值?