我有数百个Google文档和许多Google文件夹。它们在文件名中共享一个公共字符串。文档需要进入相应的文件夹,我想用一些脚本自动执行此操作。
我想做的是如下:
我有数百个Google文档,它们遵循文件名中的类似模式:
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
文件和文件夹名称之间的公共字符串是userID字符串。
目前我下载了所有文档,然后上传拖放到每个相应的文件夹中。需要很长时间!我希望有一些应用程序脚本可以自动完成,但我真的不知道从哪里开始。任何人有任何指针?
This StackOverflow question似乎想要做我想做的事情,但由于我是Apps Script的初学者,我无法真正破译解决方案。
这是使用基本Google Apps脚本DriveApp
指向正确方向的基本示例(与高级脚本服务版本或其他Google Drive API方法相对)。我想到的主要问题是如果此示例需要很长时间才能完成,脚本超时。如果发生这种情况,您将需要一个更复杂的解决方案。你也可以通过让idRegex
工作,例如,姓氏A-D然后是E-G等来使其大块化。示例正则表达式可以匹配你用下划线的随机文件;如果这是一个问题,你可能想找到一个更复杂的正则表达式。
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"
}
}
}