删除指定文件夹中超过x天的avis和jpg文件



我想使用一个脚本,从特定文件夹中删除AVIs和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());

}

您没有从文件夹中获取文件(它被固定在下面的代码中)。另外,我建议您通过id获取文件夹,这是一种更健壮的方法,因为它允许您重命名文件夹或将其移动到其他文件夹中,并且代码仍然可以工作。

您的匹配也是错误的(尽管这不是它不起作用的原因),因为字符串将被转换为regexp。和"。"Avi"将得到任何带有"Avi"的文件(除了前3个字母)。

最后,DocsList令牌是没有用的,因为你不能保存它供以后执行,我们的页面不是由于谷歌驱动器的限制,而是应用程序脚本6分钟的最大执行时间。在删除文件的情况下,实际上不需要继续搜索,因为这些文件无论如何都不会在下一次搜索结果中出现。

最后,当你调用formatDate并通过GMT时,你很可能会根据你所在的位置将日期移动一天,要么提前一天,要么之后一天,除非你真的在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

最新更新