You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Apps Script中按文件名部分文本搜索并复制文件?

解决Google Apps Script中部分文件名匹配并复制文件的问题

我明白你现在的需求——要在Google Apps Script里找出所有文件名包含Daily Stock Summary Report Kadlunga的文件,然后复制到名为Kadlunga的文件夹里,之前的代码只能匹配完整文件名对吧?别担心,我们只需要调整文件名的判断逻辑,就能实现部分匹配的效果。

基础版:仅处理指定文件夹下的文件

这个版本会遍历Attachments文件夹根目录下的所有文件,复制符合条件的到目标文件夹:

function copyMatchingFiles() {
  const dApp = DriveApp;
  // 获取源文件夹(Attachments)
  const sourceFolderIterator = dApp.getFoldersByName("Attachments");
  if (!sourceFolderIterator.hasNext()) {
    console.log("未找到名为'Attachments'的源文件夹");
    return;
  }
  const sourceFolder = sourceFolderIterator.next();

  // 获取目标文件夹(Kadlunga),不存在则自动创建
  const targetFolderIterator = dApp.getFoldersByName("Kadlunga");
  const targetFolder = targetFolderIterator.hasNext() 
    ? targetFolderIterator.next() 
    : dApp.createFolder("Kadlunga");

  // 定义要匹配的文件名关键词
  const matchKeyword = "Daily Stock Summary Report Kadlunga";

  // 遍历源文件夹下的所有文件
  const files = sourceFolder.getFiles();
  
  while (files.hasNext()) {
    const file = files.next();
    const fileName = file.getName();
    
    // 核心:判断文件名是否包含目标关键词(includes方法直观易懂)
    // 如果需要忽略大小写,可以改成:fileName.toLowerCase().includes(matchKeyword.toLowerCase())
    if (fileName.includes(matchKeyword)) {
      // 复制文件到目标文件夹,保留原文件名
      file.makeCopy(fileName, targetFolder);
      console.log(`已成功复制文件: ${fileName}`);
    }
  }
}

进阶版:递归处理所有子文件夹

如果你的目标文件可能分散在Attachments的子文件夹里,可以用这个递归版本,它会遍历所有层级的子文件夹:

function copyMatchingFilesRecursive() {
  const dApp = DriveApp;
  const sourceFolderIterator = dApp.getFoldersByName("Attachments");
  if (!sourceFolderIterator.hasNext()) {
    console.log("未找到名为'Attachments'的源文件夹");
    return;
  }
  const sourceFolder = sourceFolderIterator.next();
  const targetFolderIterator = dApp.getFoldersByName("Kadlunga");
  const targetFolder = targetFolderIterator.hasNext() 
    ? targetFolderIterator.next() 
    : dApp.createFolder("Kadlunga");
  const matchKeyword = "Daily Stock Summary Report Kadlunga";

  // 调用递归函数处理文件夹
  processFolder(sourceFolder, targetFolder, matchKeyword);
}

// 递归处理单个文件夹及其子文件夹
function processFolder(sourceFolder, targetFolder, matchKeyword) {
  // 处理当前文件夹的文件
  const files = sourceFolder.getFiles();
  while (files.hasNext()) {
    const file = files.next();
    const fileName = file.getName();
    if (fileName.includes(matchKeyword)) {
      file.makeCopy(fileName, targetFolder);
      console.log(`已复制文件: ${fileName}`);
    }
  }

  // 递归处理子文件夹
  const subFolders = sourceFolder.getFolders();
  while (subFolders.hasNext()) {
    const subFolder = subFolders.next();
    processFolder(subFolder, targetFolder, matchKeyword);
  }
}

关键逻辑说明

  • 部分匹配实现:用fileName.includes(matchKeyword)替代完整文件名匹配,这个方法会检查文件名中是否包含指定的字符串。如果需要忽略大小写,只需要把文件名和关键词都转成小写(或大写)后再判断即可。
  • 文件夹健壮性处理:代码里先检查源文件夹是否存在,避免找不到文件夹时报错;目标文件夹如果不存在会自动创建,不用手动提前建立。
  • 文件复制:使用makeCopy()方法,第一个参数是复制后的文件名(这里保留原文件名),第二个参数是目标文件夹,非常直观。

内容的提问来源于stack exchange,提问作者Dan V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:41:37