下一个脚本的作用是从特定文件夹开始搜索驱动器中具有特定名称的所有电子表格。
function searchSSH(folder, path) {
if (folder == null && path == null) {
return
searchSSH(DriveApp.getFolderById("ID"), "");
}
var files = [];
path = path + "/" + folder.getName();
var searchFile = "fullText contains 'Project <>' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
var fileIterate = folder.searchFiles(searchFile);
while ( fileIterate.hasNext() ) {
var file = fileIterate.next();
var fileId = file.getId();
var name = file.getName();
files.push(name);
for (var i=0; i<files.length; i++){
Logger.log(files[i]);
}
}
var folderIterate = folder.getFolders();
while(folderIterate.hasNext()) {
var searchFold = searchSSH(folderIterate.next(), path);
for (var i = 0; i < searchFold.length; i++) {
files.push(searchFold[i]);
}
}
return files;
}
我想做的是看如何做到这一点,以便像searchFile
一样寻找特定的文件夹,而我尝试这样做...
function searchSSH() {
var Folder = DriveApp.getFolderById("ID");
var folders = Folder.searchFolders('fullText contains "project"');
while (folders.hasNext()) {
var folder1 = folders.next();
Logger.log(folder1.getName());
for (var i = 0; i < folder1.length; i++) {
files.push(folder1[i]);
}
}
var files = [];
var searchFile = "fullText contains 'test <>' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
var fileIterate = Folder.searchFiles(searchFile);
while ( fileIterate.hasNext() ) {
var file = fileIterate.next();
var fileId = file.getId();
var name = file.getName();
files.push(name);
for (var i=0; i<files.length; i++){
Logger.log(files[i]);
}
}
return files;
}
但是不起作用。我想做的是遍历所有文件夹,直到找到名称为project
的文件夹,并继续在该文件夹中进行迭代,直到找到所有名称为test
的电子表格,但仅进行搜索在第一个文件夹中。
答案 0 :(得分:1)
- 我尝试在文件夹之间进行迭代,直到找到名称为Project的文件夹为止,并且在该文件夹内继续进行迭代,直到找到名称为Test且类型为电子表格的文件为止。
- 第一个脚本(如果它找到了文件),但我想指定我在文件夹中查找名称为Project的脚本,以提高脚本的性能
- 我正在尝试的第二个脚本没有进行迭代,因此它不起作用,因为当我运行它时,它只找到第一个文件夹,而不在其他文件夹中搜索,谢谢您的帮助。我希望现在它已经让我了解了
从您的答复中,我可以理解如下。
Test
的文件夹下检索文件名为Project
的电子表格。您想以较低的处理成本来做到这一点。如果我的理解是正确的,那么这些示例脚本又如何呢?请根据您的情况从中选择。我认为您的情况有几个答案。因此,请将此答案视为其中之一。
Test
从getFilesByName()
的文件名中检索文件。getParents()
检索每个文件的父文件夹。Project
,且mimeType为Spreadsheet,则它将检索文件。var fileName = "Test";
var folderName = "Project";
var files = DriveApp.getFilesByName(fileName);
while (files.hasNext()) {
var file = files.next();
var parents = file.getParents();
while (parents.hasNext()) {
var parent = parents.next();
if (file.getMimeType() == MimeType.GOOGLE_SHEETS && parent.getName() == folderName) {
// do something
}
}
}
Project
从getFoldersByName()
的文件夹名称中检索文件夹。getFilesByName()
检索每个文件夹中的文件。Test
,而mimeType是Spreadsheet,则它将检索文件。var fileName = "Test";
var folderName = "Project";
var folders = DriveApp.getFoldersByName(folderName);
while (folders.hasNext()) {
var folder = folders.next();
var files = folder.getFilesByName(fileName);
while (files.hasNext()) {
var file = files.next();
if (file.getMimeType() == MimeType.GOOGLE_SHEETS && file.getName() == fileName) {
// do something
}
}
}
Project
检索文件夹名称getFoldersByName()
的文件夹ID。Project
检索具有父文件夹Test
和文件名searchFiles()
以及Spreadsheet的mimeType的文件。var fileName = "Test";
var folderName = "Project";
var folders = DriveApp.getFoldersByName(folderName);
var folderIds = [];
while (folders.hasNext()) {
folderIds.push(folders.next().getId());
}
folderIds.forEach(function(id) {
var params = "'" + id + "' in parents and title='" + fileName + "' and mimeType='" + MimeType.GOOGLE_SHEETS + "'";
var files = DriveApp.searchFiles(params);
while (files.hasNext()) {
var file = files.next();
// do something
}
});
如果这些不是您想要的,对不起。