首页 > 解决方案 > 仅搜索和删除我在 Google Drive 共享文件夹中创建的文件的脚本

问题描述

经过多次尝试,我仍然无法让脚本只解析我创建的文件,因为谷歌不允许我删除其他人创建的文件,我需要它只解析我的文件。

我希望有人可以按照我需要的方式将编辑后的脚本发送给我,以使其正常工作。

function getOldFileIDs() {
  // Old date is 3 Hours
  var oldDate = new Date().getTime() - 3600*1000*3;
  var cutOffDate = new Date(oldDate).toISOString();

  // Get folderID using the URL on google drive
  var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
  var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');

  var obj = [];
  while (files.hasNext()) {
    var file = files.next();
    obj.push({id: file.getId(), date: file.getDateCreated()});
  }
  obj.sort(function(a, b) {
    var a= new Date(a.date).valueOf();
    var b= new Date(b.date).valueOf();
    return b-a;
  });
  obj.shift();
  var fileIDs = obj.map(function(e) {return e.id});
  return fileIDs;
};

function deleteFiles() {
  var fileIDs = getOldFileIDs();
  fileIDs.forEach(function(fileID) {
    Drive.Files.remove(fileID);
  });
};

我不会列出我尝试做的所有方法,因为问题会变得太大,而且我知道这里更喜欢最直接的问题。

我不能付钱给别人为我做这件事,所以我正在寻求帮助。

标签: javascriptgoogle-apps-script

解决方案


  • 您想删除您创建的文件。
    • 这些文件被放在一个共享文件夹中。
    • 这些文件包括由多个用户创建的文件。
    • 您要删除的文件如下。
      • 3 小时前创建的文件。在这种情况下,有您和其他用户创建的文件。
      • 对于 3 小时前创建的文件,您只想保留最新的文件。
      • 当您遵循上述条件时,您只想删除您创建的文件。
  • 您想使用 Google Apps 脚本实现此目的。

从您的脚本和问题中,我可以这样理解。如果我的理解是正确的,这个答案怎么样?请认为这只是几个答案之一。

修改点:

  • 在您的情况下,当添加"email" in owners搜索查询时and,仅返回您创建的文件。这样一来,您的目标就无法实现。所以var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');需要使用。

在这种情况下,如何检查所有者fileIDs.forEach(function(fileID) {Drive.Files.remove(fileID)}

模式一:

在这种模式中,会检索所有者的电子邮件,当文件被删除时,会检查所有者并将其删除。这样,只能删除您创建的文件。

修改后的脚本:

请修改 和 的功能getOldFileIDs()如下deleteFiles()

function getOldFileIDs() {
  // Old date is 3 Hours
  var oldDate = new Date().getTime() - 3600*1000*3;
  var cutOffDate = new Date(oldDate).toISOString();

  // Get folderID using the URL on google drive
  var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
  var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');

  var obj = [];
  while (files.hasNext()) {
    var file = files.next();
    obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()}); // Modified
  }
  obj.sort(function(a, b) {
    var a= new Date(a.date).valueOf();
    var b= new Date(b.date).valueOf();
    return b-a;
  });
  obj.shift();
  return obj; // Modified
};

function deleteFiles() {
  var email = "###"; // Added
  var obj = getOldFileIDs; // Modified
  obj.forEach(function(e) { // Modified
    if (e.owner == email) { // Added
      Drive.Files.remove(e.id); // Modified
    }
  });
};
  • 使用此脚本时,请将您的电子邮件地址设置为var email = "###". 或者您也可以使用var email = Session.getActiveUser().getEmail().

模式二:

当您不是所有者的文件被删除时,会发生错误。在此模式中,错误被忽略。这样,只能删除您创建的文件。

修改后的脚本:

请修改deleteFiles()如下功能。

从:
Drive.Files.remove(fileID);
至:
try {Drive.Files.remove(fileID)} catch(e) {}

笔记:

  • 不能删除您不是所有者的文件。请注意这一点。

如果我误解了你的情况,这不是你想要的方向,我很抱歉。


推荐阅读