google-apps-script - 根据文件和文件夹名称中的通用字符串将 Google Docs 分类到 Google Drive 文件夹中
问题描述
我有数百个 Google 文档和很多 Google 文件夹。它们在文件名中共享一个公共字符串。文档需要进入相应的文件夹,我想用一些脚本来自动化它。
我想要做的如下:
我有数百个 Google Docs 在文件名中遵循类似的模式:
SURNAME, Forename_userID_fileName
例如,
DOE, Jane_jd5678_Document3
PUBLIC, Tom_tp9123_reportTPS
SMITH, John_js1234_finaldocument
等等等等。
我在 Google Team Drive 中也有相应的文件夹,设置如下:
SURNAME, Forename (userCode) (userID) - userType
例如,
DOE, Jane (145374578) (jd5678) - AET Full Time
PUBLIC, Tom (673468714) (tp9123) - NR Full Time
SMITH, John (874512456) (js1234) - AET Part Time
文件和文件夹名称之间的通用字符串是用户 ID字符串。
目前我下载了所有的文档,然后上传拖放到每个相应的文件夹中。需要岁月!我希望有一些 Apps Script 可以让我自动执行此操作,但我真的不知道从哪里开始。有人有任何指示吗?
这个 StackOverflow 问题似乎想做我想做的事,但由于我是 Apps 脚本的初学者,我无法真正破译解决方案。
解决方案
这是一个使用基本 Google Apps 脚本DriveApp
(与高级脚本服务版本或其他 Google Drive API 方法相反)为您指明正确方向的基本示例。想到的主要问题是如果此示例需要很长时间才能完成,脚本会超时。如果发生这种情况,您将需要更复杂的解决方案。您也可以通过idRegex
唯一的工作将其分块,例如姓 AD 然后 EG 等。示例正则表达式可以匹配您拥有的带有下划线的随机文件;如果这是一个问题,您可能想找到一个更复杂的正则表达式。
function organizeFilesById() {
var idRegex = /_[A-z]+[0-9]+_/;
var files = DriveApp.getFiles();
while (files.hasNext()) {
var file = files.next();
var filename = file.getName();
var id = idRegex.exec(filename);
if (! id) {
continue;
} else {
id = id[0];
}
var query = "title contains '" + id + "'";
var folders = DriveApp.searchFolders(query);
if (folders.hasNext()) {
var folder = folders.next();
Logger.log("Will add %s to %s", filename, folder.getName());
//folder.addFile(file); // uncomment line to actually do it
} else {
Logger.log("No folder found for %s", filename);
// could create folder or just report "folder not found"
}
}
}
推荐阅读
- c - 将数字转换为数组中的单词
- python - python pygame暂停函数
- dataframe - dask dataframe 70GB 数据连接操作的最佳分区大小
- adaboost - 使用函数计算机器学习的错误率时遇到问题 (Adaboost)
- go - 插入整数时处理空值
- javascript - index.html 在 Chrome DevTools 中引发错误
- c++ - 通过给出一个单词从c ++文件中删除一行
- c# - 还有另一种方法可以使物体上下移动吗?
- c++ - 为什么 C++ 中的“整数”数据类型能够保存“真”或“假”;布尔值
- .net-core - 在 Blazor 客户端应用程序中登录主页顶部后显示 Hello + 一个很长的哈希码而不是用户名