我想使用一个脚本,它删除特定文件夹中的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());
}
答案 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,了解如何操作。