Reputation: 115
The next script what it does is to search all the spreadsheets with a certain name in the drive starting from a certain folder.
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;
}
What I am trying to do is to see how I can do it so that I can also look for a certain folder just like the searchFile
does and I try to do it like this...
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;
}
But doesn´t works. What I'm trying to do is to iterate through all the folders until I find the folder with the name project
and keep iterating in that folder until I find all the spreadsheets with the test
name but only search in the first folder.
Upvotes: 1
Views: 367
Reputation: 201428
- I try to iterate between folders until I find the folder with the name Project and inside that folder keep iterating until I find the file with the name Test and that it is type spreadsheet.
- The first script if it finds the file but I want to specify I look inside the folders with the name Project to improve the performance of the script
- The second script I'm trying is not iterating, so it does not work because when I run it, it only finds the first folder and dont searching inside the others folders, Thanks for trying to help me. I hope that now it has given me to understand
From your this reply, I could understand as follows.
Test
under the folder with the name of Project
. You want to do this with low process cost.If my understanding is correct, how about these sample scripts? Please choose from them for your situation. I think that there are several answers for your situation. So please think of this answer as one of them.
Test
using getFilesByName()
.getParents()
.Project
and the mimeType is Spreadsheet, it retrieves the file.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
using getFoldersByName()
.getFilesByName()
.Test
and the mimeType is Spreadsheet, it retrieves the file.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
using getFoldersByName()
.Project
and the filename of Test
and the mimeType of Spreadsheet using searchFiles()
.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
}
});
If these were not what you want, I'm sorry.
Upvotes: 1