如何用Google Apps Script获取Google Drive中两类文件的最新ID
用Google Apps Script分别获取Drive中两类文件的最新版本ID
我每小时会收到两个分别名为call log和sms log的XML文件,需要通过Google Apps Script获取这两类文件各自最新版本的ID。现有脚本只能获取文件夹中所有文件里的单个最新文件,无法区分文件类型,因此需要修改脚本实现分类获取最新文件的功能——分别扫描所有名称以call开头的文件,获取其中最新的call文件ID;同理获取最新的sms文件ID。
原单个最新文件的代码
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()]; }
场景示例
比如Drive中的文件(从新到旧排序):call file1 | sms File1 | call file2 | sms file2
原脚本只会返回call file1,但我需要同时得到:
latest of call: call file1 latest of sms : sms file1
改进后的脚本
function GetLatestCallAndSmsFiles() { const folderId = '###'; // 替换为你的目标文件夹ID const folder = DriveApp.getFolderById(folderId); const files = folder.getFiles(); let latestCallFile = null; let latestSmsFile = null; while (files.hasNext()) { const currentFile = files.next(); const fileName = currentFile.getName(); const lastUpdated = currentFile.getLastUpdated(); // 判断文件前缀,更新对应类别的最新文件 if (fileName.startsWith('call')) { if (!latestCallFile || lastUpdated > latestCallFile.getLastUpdated()) { latestCallFile = currentFile; } } else if (fileName.startsWith('sms')) { if (!latestSmsFile || lastUpdated > latestSmsFile.getLastUpdated()) { latestSmsFile = currentFile; } } } // 返回包含两类文件ID和名称的结果 return { latestCall: { id: latestCallFile ? latestCallFile.getId() : null, name: latestCallFile ? latestCallFile.getName() : null }, latestSms: { id: latestSmsFile ? latestSmsFile.getId() : null, name: latestSmsFile ? latestSmsFile.getName() : null } }; }
脚本说明
- 初始化
latestCallFile和latestSmsFile两个变量,分别存储两类文件的最新版本 - 遍历文件夹内所有文件,通过
startsWith()方法判断文件名称前缀 - 对每类文件,比较当前文件与已记录的最新文件的更新时间,更新最新文件记录
- 最终返回包含两类文件ID和名称的对象,若某类无对应文件则返回
null
返回示例
调用函数后会得到如下格式的返回值:
{ latestCall: { id: 'xxxxxx', name: 'call file1' }, latestSms: { id: 'yyyyyy', name: 'sms File1' } }
内容的提问来源于stack exchange,提问作者user12736831
相关产品推荐
相关产品推荐

