【问题标题】:Delete file if its name starts with a date older than the current one (Google Drive)如果文件的名称以早于当前日期的日期开头,则删除文件(Google Drive)
【发布时间】:2019-10-19 05:22:20
【问题描述】:

在 Stackoverflow 社区的帮助下,我能够创建这个脚本来删除超过 3 小时的文件:

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('XXXXXXXXXXXXXXXXXXXXX');
  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 = "XXXXXXXXXXXXXXXXX@gmail.com"; // Added
  var obj = getOldFileIDs(); // Modified
  obj.forEach(function(e) { // Modified
    if (e.owner == email) { // Added
      Drive.Files.remove(e.id); // Modified
    }
  });
};

此文件夹中的文件名始终以日期开头,例如:

2019/10/05 SerieA Vasco da Gama x Flamengo.pdf

我想知道我需要在脚本中修改什么以及它会是什么样子,以便在创建超过 3 小时时不会删除它,而是从它的文件中删除日期早于当前。

我尝试修改.getdate但完全不成功,我无法让脚本解析文件名的开头,我只能找到文件名及其id。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:
    • 有些文件的文件名类似于2019/10/05 SerieA Vasco da Gama x Flamengo.pdf
      • 日期字符串和格式始终分别从文件名和yyyy/MM/dd 开始分别为 10 个字符。
    • 您想删除今天之前文件名中包含旧日期字符串的文件。
      • 在这种情况下,more than 3 hours of creation 将被忽略。所以modifiedDate 也被忽略了。
    • 您希望使用 Google Apps 脚本实现此目的。

    如果我的理解是正确的,那么这个修改呢?请认为这只是几个答案之一。修改后的脚本流程如下。

    流程:

    1. 检索文件夹中的所有文件。
    2. 对于每个文件,检索文件名和日期字符串。
    3. 将文件名中的日期字符串转换为日期对象。并且与今天相比。当文件名中的日期早于今天时,将文件信息添加到数组中进行删除。
    4. 从检索到的文件信息中删除文件

    修改脚本:

    当你的脚本被修改时,请修改getOldFileIDs()的函数如下。

    function getOldFileIDs() {
      var folder = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXX');
      var files = folder.getFiles();
      var today = new Date(new Date().toDateString()).getTime();
      var obj = [];
      while (files.hasNext()) {
        var file = files.next();
        var dateFromFilename = file.getName().substr(0, 10);
        if (/\d{4}\/\d{2}\/\d{2}/.test(dateFromFilename)) { // Here, the format of date string is checked.
          var date = new Date(dateFromFilename).getTime();
          if (date < today) {
            obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()});
          }
        }
      }
      return obj;
    };
    

    参考资料:

    如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多