Google apps script 调整删除Google Drive上超过30天的文件的脚本

Google apps script 调整删除Google Drive上超过30天的文件的脚本,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,我有一个从谷歌硬盘删除旧文件的脚本。。。我想调整它,以便它删除特定文件夹中的文件,特别是3个多小时前创建的文件。还有一个细节,文件夹不能为空,因此即使最新文件已发布超过3小时,也不能删除。只有在文件夹中添加其他文件时,才能删除该文件。我需要帮助完成这项工作,我无法编辑这些详细信息的脚本 function getOldFileIDs() { var fileIDs = []; // Old date is 30 days var oldDate = new Date().getTime

我有一个从谷歌硬盘删除旧文件的脚本。。。我想调整它,以便它删除特定文件夹中的文件,特别是3个多小时前创建的文件。还有一个细节,文件夹不能为空,因此即使最新文件已发布超过3小时,也不能删除。只有在文件夹中添加其他文件时,才能删除该文件。我需要帮助完成这项工作,我无法编辑这些详细信息的脚本

function getOldFileIDs() {
  var fileIDs = [];
  // Old date is 30 days
  var oldDate = new Date().getTime() - 3600*1000*24*30;
  var cutOffDate = Utilities.formatDate(new Date(oldDate), "GMT", "yyyy-MM-dd");

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

  while (files.hasNext()) {
    var file = files.next();
    fileIDs.push(file.getId());
    Logger.log('ID: ' + file.getId() + ', Name: ' + file.getName());
  }
  return fileIDs;
};

function deleteFiles() {
  var fileIDs = getOldFileIDs();
  fileIDs.forEach(function(fileID) {
    DriveApp.getFileById(fileID).setTrashed(true);
  });
};
函数getOldFileIDs(){ var fileIDs=[]; //旧的日期是30天 var oldDate=new Date().getTime()-3600*1000*24*30; var截止日期=Utilities.formatDate(新日期(旧日期),“GMT”,“yyyy-MM-dd”); //使用google drive上的URL获取folderID var folder=DriveApp.getFolderById('XXXXXXX'); var files=folder.searchFiles('modifiedDate<'+截止日期+'”); while(files.hasNext()){ var file=files.next(); push(file.getId()); Logger.log('ID:'+file.getId()+',Name:'+file.getName()); } 返回文件ID; }; 函数deleteFiles(){ var fileIDs=getOldFileIDs(); forEach(函数(fileID){ DriveApp.getFileById(fileID).setTrashed(true); }); };
  • 您想删除
    修改日期<3小时
    的文件
  • 这些文件位于特定文件夹中
  • 您希望使用谷歌应用程序脚本实现这一点
如果我的理解是正确的,这次修改怎么样

修改点:
  • 当看到的文档时,对于
    modifiedDate
    ,似乎需要使用ISO格式
当上述点和
modifiedDate<3小时
反映到脚本中时,它将变成如下所示

function getOldFileIDs() {
  // Old date is 30 days
  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('XXXXXXX');
  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(x, y) {return x.date < y.date ? 1 : -1});
  obj.shift();
  var fileIDs = obj.map(function(e) {return e.id});
  return fileIDs;
};
修改脚本: 修改脚本时,请按以下方式修改

function getOldFileIDs() {
  // Old date is 30 days
  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('XXXXXXX');
  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(x, y) {return x.date < y.date ? 1 : -1});
  obj.shift();
  var fileIDs = obj.map(function(e) {return e.id});
  return fileIDs;
};
发件人: 致: 参考:
如果我误解了你的问题,而这不是你想要的结果,我道歉

增加1:
  • 您想删除
    修改日期<3小时
    的文件
  • 这些文件位于特定文件夹中
  • 您希望使用谷歌应用程序脚本实现这一点
  • 您想保留最新创建的文件。
如果我的理解是正确的,这次修改怎么样

修改脚本: 请修改
getOldFileIDs()
的函数,如下所示

function getOldFileIDs() {
  // Old date is 30 days
  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('XXXXXXX');
  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(x, y) {return x.date < y.date ? 1 : -1});
  obj.shift();
  var fileIDs = obj.map(function(e) {return e.id});
  return fileIDs;
};
致:
  • 通过此修改,文件ID被完全删除。因此,在测试时,请小心。

非常感谢您的解释。。。仍然存在疑问的是,是否有任何方法可以使文件夹永远不为空,始终至少有一个文件,即使它的创建时间超过3小时。文件夹不能为空。最新的文件必须始终保留,即使它是旧的(创建3小时或更长时间)。@Frederico Mattos感谢您的回复。我不得不道歉,我提议的脚本对你的情况没有用处。在答复中,您希望保留最新创建的文件。我可以这样理解。由此,我又提出了一个修改后的脚本。你能确认一下吗?如果我误解了你的问题,而这不是你想要的方向,我很抱歉。关于只留下一个文件的问题,我可以向你保证,它在几个小时内工作,因为目前有几个文件是在不到3小时的时间内创建的。我会回来告诉你它是否有效。但从我看到的情况来看,它工作得很好,我已经创建了一个触发器,它将每30分钟激活一次,以便能够删除旧文件。我可以再问你一件事吗?当文件被扔进垃圾箱时,它们会消耗谷歌硬盘内存吗?如果是这样,有没有办法永久删除文件而不被扔进垃圾箱?我恐怕无法满足5G的容量。非常感谢您的帮助,您不知道这将使我的日常工作变得更加轻松!很高兴你来了,没问题,伙计!
DriveApp.getFileById(fileID).setTrashed(true);
Drive.Files.remove(fileId);