javascript - 仅搜索和删除我在 Google Drive 共享文件夹中创建的文件的脚本
问题描述
经过多次尝试,我仍然无法让脚本只解析我创建的文件,因为谷歌不允许我删除其他人创建的文件,我需要它只解析我的文件。
我希望有人可以按照我需要的方式将编辑后的脚本发送给我,以使其正常工作。
function getOldFileIDs() {
// Old date is 3 Hours
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('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
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(a, b) {
var a= new Date(a.date).valueOf();
var b= new Date(b.date).valueOf();
return b-a;
});
obj.shift();
var fileIDs = obj.map(function(e) {return e.id});
return fileIDs;
};
function deleteFiles() {
var fileIDs = getOldFileIDs();
fileIDs.forEach(function(fileID) {
Drive.Files.remove(fileID);
});
};
我不会列出我尝试做的所有方法,因为问题会变得太大,而且我知道这里更喜欢最直接的问题。
我不能付钱给别人为我做这件事,所以我正在寻求帮助。
解决方案
- 您想删除您创建的文件。
- 这些文件被放在一个共享文件夹中。
- 这些文件包括由多个用户创建的文件。
- 您要删除的文件如下。
- 3 小时前创建的文件。在这种情况下,有您和其他用户创建的文件。
- 对于 3 小时前创建的文件,您只想保留最新的文件。
- 当您遵循上述条件时,您只想删除您创建的文件。
- 您想使用 Google Apps 脚本实现此目的。
从您的脚本和问题中,我可以这样理解。如果我的理解是正确的,这个答案怎么样?请认为这只是几个答案之一。
修改点:
- 在您的情况下,当添加
"email" in owners
搜索查询时and
,仅返回您创建的文件。这样一来,您的目标就无法实现。所以var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');
需要使用。
在这种情况下,如何检查所有者fileIDs.forEach(function(fileID) {Drive.Files.remove(fileID)}
?
模式一:
在这种模式中,会检索所有者的电子邮件,当文件被删除时,会检查所有者并将其删除。这样,只能删除您创建的文件。
修改后的脚本:
请修改 和 的功能getOldFileIDs()
如下deleteFiles()
。
function getOldFileIDs() {
// Old date is 3 Hours
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('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');
var obj = [];
while (files.hasNext()) {
var file = files.next();
obj.push({id: file.getId(), date: file.getDateCreated(), owner: file.getOwner().getEmail()}); // Modified
}
obj.sort(function(a, b) {
var a= new Date(a.date).valueOf();
var b= new Date(b.date).valueOf();
return b-a;
});
obj.shift();
return obj; // Modified
};
function deleteFiles() {
var email = "###"; // Added
var obj = getOldFileIDs; // Modified
obj.forEach(function(e) { // Modified
if (e.owner == email) { // Added
Drive.Files.remove(e.id); // Modified
}
});
};
- 使用此脚本时,请将您的电子邮件地址设置为
var email = "###"
. 或者您也可以使用var email = Session.getActiveUser().getEmail()
.
模式二:
当您不是所有者的文件被删除时,会发生错误。在此模式中,错误被忽略。这样,只能删除您创建的文件。
修改后的脚本:
请修改deleteFiles()
如下功能。
Drive.Files.remove(fileID);
至:
try {Drive.Files.remove(fileID)} catch(e) {}
笔记:
- 不能删除您不是所有者的文件。请注意这一点。
如果我误解了你的情况,这不是你想要的方向,我很抱歉。
推荐阅读
- javascript - 无法读取 null、javascript 的属性“长度”。检查给定的字符串是否包含字母:p & t
- php - Laravel 路由组控制器
- plotly - PlotlyJS unix 时间戳 xaxis
- node.js - Sequelize Tedious 从十进制中去除 0
- go - 在 Go 中将文件从本地文件夹移动到 s3 存储桶
- css - flex-basis: column,wrap 应该发生什么?
- java - 在 Primefaces 日程中显示不可编辑的事件
- firebase - FieldValue.arrayUnion:如何将相同的元素添加到数组中?扑
- python - 使用 Python 在 Maya 中切换 X 射线模式
- webstorm - WebStorm 文件窗格不会自动刷新