如何根据上传的文件自动重命名文件夹,如果有重复的文件夹名称谷歌表单



这是我上一个问题的下一集(已经解决(:谷歌表单根据提交的值将文件上传到特定的新文件夹

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

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));
}

问题是,当有两个或多个具有相同NAME的人上传了一个文件时,将无法创建文件夹。并将文件放在根文件夹中。

我需要的是在文件夹名称上添加后缀。假设有3个人患有NAME = noobsee。所以,文件夹应该是:

  1. noobse_01
  2. noobse_02
  3. noobse_03

如何操作?

我相信你的目标如下。

  • 当值为Name的文件夹名称存在时,您希望通过添加后缀来创建新文件夹。
    • 作为一个示例情况,当sample的文件夹名称已存在并且sampleName已提交时,您希望将现有文件夹名称重命名为sample_01,并希望使用sample_02的文件夹名称创建新文件夹
  • 在您的情况下,该脚本被放入Google Form的容器绑定脚本中。并且onFormSubmit已被安装为OnSubmit触发器的可安装触发器

在这种情况下,我想建议修改";准备文件夹"如下所示。

修改的脚本:

发件人:

// 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);
  • 在这种情况下,只有当提交了相同的Name值时,才会添加后缀
  • 根据您的问题,它假设后缀的位数为2,如_01_02

相关内容

最新更新