我有一个表格表格,我们的公司用户将该表格保存到公司的Google云端硬盘文件夹(G Suite)中。我们必须将这些表格保留30天。
我想在35天后自动删除这些文件。所以我写了这个脚本:
function DeleteOldFiles() {
var Folders = new Array(
'0B8xnkPYxGFbUMktOWm14TVA3Yjg',
'1C_VUaqPl9FQlaajY_wsZzJgVGHDrPKm8');
var Files;
Logger.clear();
for each (var FolderID in Folders) {
Folder = DriveApp.getFolderById(FolderID)
Files = Folder.getFiles();
while (Files.hasNext()) {
var File = Files.next();
if (new Date() - File.getLastUpdated() > 35 * 24 * 60 * 60 * 1000) {
File.setTrashed(true); // Places the file int the Trash folder
// Drive.Files.remove(File.getId()); // Permanently deletes the file
Logger.log('File ' + File.getName() + ' was deleted.');
}}}
if(Logger.getLog() != '')
MailApp.sendEmail('batnip@choiceaviation.com', 'Backups have been removed from Google Drive', Logger.getLog());}
问题是我有时会收到以下消息: “访问被拒绝:DriveApp。(第18行,文件“代码”)”
有时脚本可以工作,有时则不行。我最终得出结论,它可能仅在删除我自己的文件时才有效,而在另一个G Suite用户那里有文件时则无效。
解决方案?
答案 0 :(得分:0)
您是正确的,only the owner may validly use the .setTrashed函数。您可以尝试首先使用.setOwner(email address)将自己设置为所有者:
if (new Date() - File.getLastUpdated() > 35 * 24 * 60 * 60 * 1000) {
File.setOwner('your email address'); // Transfers ownership to user
File.setTrashed(true); // Places the file int the Trash folder
// Drive.Files.remove(File.getId()); // Permanently deletes the file
Logger.log('File ' + File.getName() + ' was deleted.');
}}}
如果这种方法行不通-需要域管理员权限,我相信-您也可以尝试创建一个存档文件夹作为一种解决方法,并将文件简单地移入其中,如此处概述:stackoverflow.com/questions/38808875/moving-files-in-google-drive-using-google-script。