如何用Google Apps Script按CSV内容批量重命名谷歌云端硬盘文件
Google Apps Script 批量重命名CSV文件实现方案
核心实现代码
function batchRenameCSVFiles() { // 替换为你的目标文件夹ID(可从文件夹URL中获取) const folderId = "你的文件夹ID"; const folder = DriveApp.getFolderById(folderId); const files = folder.getFilesByType(MimeType.CSV); while (files.hasNext()) { const file = files.next(); const fileName = file.getName(); // 判断文件前缀是IN还是OUT let prefix = ""; if (fileName.toLowerCase().includes("in_history")) { prefix = "IN"; } else if (fileName.toLowerCase().includes("out_history")) { prefix = "OUT"; } else { // 非目标文件跳过 continue; } // 读取CSV内容 const csvContent = file.getBlob().getDataAsString(); const rows = csvContent.split("\n").filter(row => row.trim() !== ""); if (rows.length <= 1) { // 跳过只有表头的空文件 continue; } // 提取第三列(索引为2,因为数组从0开始)的时间戳 const timestamps = rows.slice(1).map(row => { const columns = row.split(","); return columns[2] ? parseInt(columns[2].trim(), 10) : null; }).filter(ts => ts !== null); if (timestamps.length === 0) { continue; } // 找到最早和最晚时间戳 const minTs = Math.min(...timestamps); const maxTs = Math.max(...timestamps); // 转换为yyyy/mm/dd格式 const formatDate = (timestamp) => { const date = new Date(timestamp * 1000); // UTC时间戳转毫秒 const year = date.getUTCFullYear(); const month = String(date.getUTCMonth() + 1).padStart(2, "0"); const day = String(date.getUTCDate()).padStart(2, "0"); return `${year}/${month}/${day}`; }; const startDate = formatDate(minTs); const endDate = formatDate(maxTs); // 生成新文件名 const newFileName = `${prefix} - ${startDate} - ${endDate}.csv`; // 重命名文件 file.setName(newFileName); console.log(`已重命名:${fileName} → ${newFileName}`); } }
关键部分说明
- 定位文件夹:通过
DriveApp.getFolderById获取目标文件夹,需替换成你自己的文件夹ID(从浏览器地址栏URL中提取,比如https://drive.google.com/drive/folders/XXXXXX里的XXXXXX)。 - 遍历CSV文件:用
getFilesByType(MimeType.CSV)筛选文件夹内所有CSV文件,避免处理其他类型文件。 - 判断前缀:通过原文件名包含的
in_history/out_history关键词区分IN/OUT类型,不匹配的文件直接跳过。 - 读取CSV内容:通过
getBlob().getDataAsString()获取文件文本内容,按行拆分后过滤空行,跳过只有表头的无效文件。 - 处理时间戳:提取第三列的UTC时间戳(注意数组索引是2),过滤无效值后取最大/最小值,再转换为
yyyy/mm/dd格式的UTC日期。 - 重命名文件:拼接新文件名后调用
setName完成重命名,控制台输出日志方便排查。
使用注意事项
- 首次运行需要授权:打开Google Apps Script编辑器,粘贴代码后点击运行,按提示完成授权(属于正常Google API权限请求)。
- 建议先测试:先在测试文件夹放几个CSV文件,确认逻辑正确后再批量处理所有文件。
- 时间戳兼容性:代码假设第三列是秒级UTC时间戳,如果是毫秒级,去掉
formatDate函数里的* 1000即可。 - 文件名冲突:如果生成的新文件名已存在,Google Drive会自动添加序号(比如
(1)),需避免冲突可在代码里增加文件名重复检查逻辑。
内容的提问来源于stack exchange,提问作者SayMyName
相关产品推荐
相关产品推荐

