Bri*_*ian 3 javascript date file google-apps-script google-drive-api
我正在使用我的 Google 云端硬盘来存储来自家中 IP 摄像机的运动检测记录。我正在运行以下脚本(稍作修改)以自动从我的 Google 云端硬盘中删除超过 3 天的文件:
该脚本设置为每天早上 5 点左右运行。我遇到的问题是,当有太多文件需要删除时,我收到一条错误消息,指出我已超出最大写入速率。这是因为 set tarted 命令包含在 for 循环中。如果我添加睡眠来减慢循环速度,则会收到另一个错误,指出脚本未在允许的时间内完成。
我也许可以运行 2 到 3 次,但这很笨重。
如何修改此脚本以使其创建要删除的文件的临时列表,并在它最终跳出循环时执行删除?我对 GAS 语言和语法没有太多经验,所以细节真的很棒。
此代码将返回超过 30 天的文件的所有文件 ID。它与其他帖子中引用的代码非常不同。您正在使用的代码中有一个已弃用的类。 DocsList现已弃用。我给您的代码使用DriveApp,并利用该searchFiles()方法。
function getFilesByDate() {
var arrayOfFileIDs = [];
var ThirtyDaysBeforeNow = new Date().getTime()-3600*1000*24*30;
// 30 is the number of days
//(3600 seconds = 1 hour, 1000 milliseconds = 1 second, 24 hours = 1 day and 30 days is the duration you wanted
//needed in yr-month-day format
var cutOffDate = new Date(ThirtyDaysBeforeNow);
var cutOffDateAsString = Utilities.formatDate(cutOffDate, "GMT", "yyyy-MM-dd");
//Logger.log(cutOffDateAsString);
var theFileID = "";
//Create an array of file ID's by date criteria
var files = DriveApp.searchFiles(
'modifiedDate < "' + cutOffDateAsString + '"');
while (files.hasNext()) {
var file = files.next();
theFileID = file.getId();
arrayOfFileIDs.push(theFileID);
//Logger.log('theFileID: ' + theFileID);
//Logger.log('date last updated: ' + file.getLastUpdated());
}
return arrayOfFileIDs;
//Logger.log('arrayOfFileIDs: ' + arrayOfFileIDs);
};
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以取消注释Logger.log()语句、运行代码并查看代码返回的内容。以下Logger.log()声明:
//Logger.log('date last updated: ' + file.getLastUpdated());
Run Code Online (Sandbox Code Playgroud)
将打印检索到的文件的日期。
上面的代码不会删除任何文件,或将任何内容设置为垃圾。它只是按日期搜索文件,并创建所有文件 ID 的数组。
因此,删除或垃圾文件的函数可以首先调用该函数并获取要处理的所有文件 ID 的列表。
最好先测试代码而不删除任何文件,以确保代码在运行删除任何内容的版本之前获取正确的文件。
如果您想删除文件而不先将其设置为已删除,则可以这样做。
下面的示例使用高级 Google Drive 服务。请参阅文档了解当前启用高级驱动服务的方法。
//To delete a file without first sending it to the trash requires the Advanced Drive API to be enabled
function deleteFile(idToDLET) {
idToDLET = 'the File ID';
//This deletes a file without needing to move it to the trash
var rtrnFromDLET = Drive.Files.remove(idToDLET);
}
Run Code Online (Sandbox Code Playgroud)
要调用获取要删除的文件 ID 的函数,它看起来像这样:
function deleteFiles() {
var arrayIDs = getFilesByDate();
for (var i=0; i < arrayIDs.length; i++) {
Logger.log('arrayIDs[i]: ' + arrayIDs[i]);
//This deletes a file without needing to move it to the trash
var rtrnFromDLET = Drive.Files.remove(arrayIDs[i]);
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12690 次 |
| 最近记录: |