从指定文件夹中删除avis和jpgs且超过x天

时间:2014-05-26 10:00:31

标签: file file-io google-apps-script google-drive-api

我想使用一个脚本,它删除特定文件夹中的AVI和JPG文件。我想按日期和扩展名过滤它们。我有这个脚本,我认为它非常接近我想要的,但它没有删除任何东西,它给我发了一封空信。 (我知道,我应该把垃圾部分注释掉,但这是出于安全考虑,所以当我的报告看起来不错时我会这样做)

function DeleteMyAVIs() {
var pageSize = 5000;
var files = null;
var token = null;
var i = null;
var SevenDaysBeforeNow = new Date().getTime()-3600*1000*24*7 ;
Logger.clear()
do {
var result = DocsList.getAllFilesForPaging(pageSize, token);
var files = DocsList.getFolder("motion").getFiles();
var token = result.getToken();
    for(n=0;n<files.length;++n){
      if(files[n].getName().toLowerCase().match('.avi')=='.avi' && files[n].getDateCreated().getTime() < SevenDaysBeforeNow){
            //files[n].setTrashed(true)
            Logger.log(files[n].getName()+' created on '+Utilities.formatDate(files[n].getDateCreated(), 'GMT','MMM-dd-yyyy'))
        }
        if(files[n].getName().toLowerCase().match('.mpg')=='.mpg' && files[n].getDateCreated().getTime() < SevenDaysBeforeNow){
            //files[n].setTrashed(true)
          Logger.log(files[n].getName()+' created on '+Utilities.formatDate(files[n].getDateCreated(), 'GMT','MMM-dd-yyyy'))
        }
      }    
 } while (files.length == pageSize);

  MailApp.sendEmail('xy@gmail.com', 'Script AUTODELETE report', Logger.getLog());

}

1 个答案:

答案 0 :(得分:0)

你没有从文件夹中获取文件(它已在下面的代码中修复)。另外,我建议您通过id获取文件夹,这是一种更强大的方式,因为它允许您重命名文件夹或将其移动到其他文件夹中,代码仍然有效。

您的匹配也是错误的(虽然这不是它不起作用的原因),因为该字符串将转换为正则表达式。并且“。avi”会在任何地方获得任何带有“avi”的文件(除了前三个字母之外)。

最后,DocsList令牌无用,因为您无法将其保存以供日后执行,而且我们的页面不是由于Google Drive限制,而是Apps脚本最长执行时间为6分钟。在您删除文件的情况下,不需要继续搜索,因为无论如何文件都不会出现在下一个搜索结果中。

最后,当你打电话给formatDate并通过格林尼治标准时,你最有可能将日期改为一天,无论是前一天还是后一天取决于你的位置,除非你真的在GMT上0小时,没有夏令时(我怀疑)。您应该使用自己的实时区域或获取脚本的默认值(如下所示)。

function deleteMyAVIs() {
  var pageSize = 500; //be careful with how much files you process at once, you're going to timeout
  var sevenDaysAgo = Date.now()-1000*60*60*24*7;
  var TZ = Session.getScriptTimeZone();

  Logger.clear();

  var result = DocsList.getFolderById('folder-id').getFilesForPaging(pageSize);
  var files = result.getFiles();
  //token = result.getToken(); //not useful and fortunately not important for your case
  for( n=0;n<files.length;++n ) {
    if(files[n].getName().toLowerCase().match('\\.(avi|mpg)$') && files[n].getDateCreated().getTime() < sevenDaysAgo){
      //files[n].setTrashed(true)
      Logger.log(files[n].getName()+' created on '+Utilities.formatDate(files[n].getDateCreated(), TZ,'MMM-dd-yyyy'))
    }
  }

  MailApp.sendEmail('xy@gmail.com', 'Script AUTODELETE report', Logger.getLog());
}

顺便说一句,如果您以后需要继续进行云端硬盘搜索,则应使用DriveApp代替DocsList。请参阅this other post,了解如何操作。