如何使用谷歌应用程序脚本从谷歌硬盘获取不同名称的最新文件



我每小时收到两个名为call logsms log的XML文件。我想使用谷歌应用程序脚本获得最新版本的call(文件名(和sms(文件名的(文件的id。我发现了这个问题,但这只是为了获得一个最新的文件so my question is NOT a duplicate of this one。然而,我的要求比这更复杂一些。

以下是将为您提供the最新文件的代码:

function NewestFile()
{
var folder = DriveApp.getFolderById('###');
var fi = folder.getFiles();
var lastUpdatedFile = null;
while(fi.hasNext()){
if(!lastUpdatedFile){ //Checks if we didn't assign anything to lastUpdatedFile
lastUpdatedFile = fi.next();
}else{
var currentFile = fi.next();
if(lastUpdatedFile.getLastUpdated() < currentFile.getLastUpdated()){
lastUpdatedFile = currentFile;
}
}
}

return [lastUpdatedFile.getId(),lastUpdatedFile.getName()];
}

例如google Drive中的文件(最新文件到最旧文件-从左到右(:

call file1 | sms File1 | call file2 | sms file2

上面的脚本将得到call file1,但我想要最新的调用和短信文件,如下所示:

latest of call: call file1
latest of sms : sms file1

让我重新表述一下。如果你想要所有文件之间的最新版本,上面的脚本可以很好地工作。有两种类型的文件(呼叫、短信(。我想扫描所有调用文件(文件名以"call"开头(,并获取最新调用文件的id。以同样的方式,扫描所有短信文件(文件名以名称"短信"开头(,并获得最新短信文件的id。如果清楚的话,请告诉我。谢谢

获取最新文件

function getLatestFiles() {
const ss = SpreadsheetApp.getActive();
const calls = DriveApp.getFilesByName("Call Log");
const cA = [];
const sA = [];
while(calls.hasNext()) {
let file = calls.next();
cA.push( {id:file.getId(),date:file.getDateCreated()})
}
cA.sort((a,b)=> {return new Date(b.date).valueOf() - new Date(a.date).valueOf(); })
const sms = DriveApp.getFilesByName("SMS Log");
while(sms.hasNext()) {
let file = sms.next();
sA.push({id:file.getId(),date:file.getDateCreated()})
}
sA.sort((a,b) => {return new Date(b.date).valueOf() - new Date(a.date).valueOf(); });
Logger.log('Latest Call Log Id: %s',cA[0].id);
Logger.log('Latest SMS Log Id: %s',sA[0].id);
}

版本2:

function getLatestFiles() {
const folder = DriveApp.getFolderById("folderId");
const files = folder.getFiles();
const cA = [];
const sA = [];
while (files.hasNext()) {
let file = files.next();
if (file.getName().match(/call-(##.*##)/)) {
cA.push({ id: file.getId(), date: file.getDateCreated() });
} else if (file.getName().match(/sms-(##.*##)/)) {
sA.push({ id: file.getId(), date: file.getDateCreated() });
}
cA.sort((a, b) => new Date(b.date).valueOf() - new Date(a.date).valueOf());
sA.sort((a, b) => new Date(b.date).valueOf() - new Date(a.date).valueOf());
Logger.log('Latest Call Log Id: %s', cA[0].id);
Logger.log('Latest SMS Log Id: %s', sA[0].id);
}
}

上一个版本可能需要一些调试时间,因为我还没有收到关于唯一ID的最后一个问题的回复,所以regex没有经过测试

最新更新