Google apps script 如果存在重复的文件夹名Google Form,如何根据上载的文件自动重命名文件夹

Google apps script 如果存在重复的文件夹名Google Form,如何根据上载的文件自动重命名文件夹,google-apps-script,google-forms,Google Apps Script,Google Forms,这是我上一个问题(已解决)的下一集: 因此,我成功地在Google Drive上创建了一个新文件夹,该文件夹基于用户使用此脚本在NAME字段中输入的值 function onFormSubmit(e) { const folderId = "###"; // Please set top folder ID of the destination folders. const form = FormApp.getActiveForm(); const formRe

这是我上一个问题(已解决)的下一集:

因此,我成功地在Google Drive上创建了一个新文件夹,该文件夹基于用户使用此脚本在
NAME
字段中输入的值

function onFormSubmit(e) {
  const folderId = "###";  // Please set top folder ID of the destination folders.
  const form = FormApp.getActiveForm();
  const formResponses = form.getResponses();
  const itemResponses = formResponses[formResponses.length-1].getItemResponses();

  Utilities.sleep(3000); // This line might not be required.

  // Prepare the folder.
  const destFolder = DriveApp.getFolderById(folderId);
  const folderName = itemResponses[0].getResponse();
  const subFolder = destFolder.getFoldersByName(folderName);
  const folder = subFolder.hasNext() ? subFolder : destFolder.createFolder(folderName);

  // Move files to the folder.
  itemResponses[1].getResponse().forEach(id => DriveApp.getFileById(id).moveTo(folder));
}
问题是,如果有两个或两个以上的人具有相同的
姓名
上载了文件,则无法创建文件夹。并将文件放在根文件夹中

我需要的是在文件夹名称上添加后缀。假设有3个人的名字是noobsee。因此,文件夹应为:

  • noobsee_01
  • noobsee_02
  • noobsee_03

  • 如何做到这一点?

    我相信你的目标如下

    • name
      值的文件夹名称存在时,您希望通过添加后缀来创建新文件夹。
      • 作为示例情况,当
        sample
        的文件夹名存在并且
        sample
        name
        已提交时,您希望将现有文件夹名重命名为
        sample\u 01
        ,并希望创建文件夹名为
        sample\u 02
        的新文件夹
    • 在您的情况下,脚本被放在GoogleForm的容器绑定脚本中。并且,
      onFormSubmit
      已作为OnSubmit触发器的可安装触发器安装
    在这种情况下,我建议修改“准备文件夹”的脚本,如下所示

    修改脚本: 发件人: 致:
    • 在这种情况下,仅当提交了相同的
      Name
      值时,才会添加后缀
    • 根据您的问题,它假定后缀的位数为2,如
      \u 01
      \u 02

    做得很好!太棒了,谢谢你。你真是救命恩人:)。顺便说一句,我做了一些修改,使其区分大小写,所以我用.toLowerCase()解析名称
    // Prepare the folder.
    const destFolder = DriveApp.getFolderById(folderId);
    const folderName = itemResponses[0].getResponse();
    const subFolder = destFolder.getFoldersByName(folderName);
    const folder = subFolder.hasNext() ? subFolder : destFolder.createFolder(folderName);
    
    // Prepare the folder.
    const destFolder = DriveApp.getFolderById(folderId);
    let folderName = itemResponses[0].getResponse();
    const subFolder = destFolder.searchFolders("title contains '" + folderName + "'");
    const reg = new RegExp(`^${folderName}$|^${folderName}_\\d{2}$`);
    if (subFolder.hasNext()) {
      const folderNames = {};
      while (subFolder.hasNext()) {
        const fol = subFolder.next();
        const fName = fol.getName();
        if (reg.test(fName)) folderNames[fName] = fol;
      }
      const len = Object.keys(folderNames).length;
      if (len == 1 && folderNames[folderName]) {
        folderNames[folderName].setName(folderName + "_01");
      }
      folderName += "_" + ("00" + (len + 1)).slice(-2);
    }
    const folder = destFolder.createFolder(folderName);