如果有重复的文件夹名称,如何根据上传的文件自动重命名文件夹 Google 表格
How to automatically rename folder based on uploaded file if there are duplicated folder name Google Form
这是我之前问题的下一集(已解决):
所以,我使用此脚本根据用户在字段 NAME
中输入的值成功地在 Google 驱动器上创建了一个新文件夹。
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));
}
问题是当有 2 个或更多人使用相同 NAME
上传文件时,将无法创建文件夹。并将文件放在根文件夹中。
我需要的是在文件夹名称上添加后缀。假设有 3 个人 NAME = noobsee
。所以,文件夹应该是:
- noobsee_01
- noobsee_02
- noobsee_03
怎么做?
我相信你的目标如下。
- 当
Name
的值的文件夹名称已经存在时,您想通过添加后缀来创建新的文件夹。
- 举个例子,当
sample
的文件夹名称已经存在,并且提交了sample
的Name
,您想将现有的文件夹名称重命名为sample_01
并想创建文件夹名称为 sample_02
. 的新文件夹
- 在你的情况下,脚本放在Google表单的container-bound脚本中。并且
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
相同的值时,才加上后缀
- 根据你的问题,假设suffix的位数是2,如
_01
, _02
,.
这是我之前问题的下一集(已解决):
所以,我使用此脚本根据用户在字段 NAME
中输入的值成功地在 Google 驱动器上创建了一个新文件夹。
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));
}
问题是当有 2 个或更多人使用相同 NAME
上传文件时,将无法创建文件夹。并将文件放在根文件夹中。
我需要的是在文件夹名称上添加后缀。假设有 3 个人 NAME = noobsee
。所以,文件夹应该是:
- noobsee_01
- noobsee_02
- noobsee_03
怎么做?
我相信你的目标如下。
- 当
Name
的值的文件夹名称已经存在时,您想通过添加后缀来创建新的文件夹。- 举个例子,当
sample
的文件夹名称已经存在,并且提交了sample
的Name
,您想将现有的文件夹名称重命名为sample_01
并想创建文件夹名称为sample_02
. 的新文件夹
- 举个例子,当
- 在你的情况下,脚本放在Google表单的container-bound脚本中。并且
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
相同的值时,才加上后缀 - 根据你的问题,假设suffix的位数是2,如
_01
,_02
,.