A good person
A good person

Reputation: 264

Is it possible to run a script on subfolders

I made a code that renames multiple files in Google Drive (taken from Here) and here is the content

function rename() {

  var folderid = "<<insert your folder ID>>"
  
  var folder = DriveApp.getFolderById(folderid)

  var myfiles = folder.getFiles();

  while (myfiles.hasNext()) { 
  
    var myfile = myfiles.next();   
    var myname = myfile.getName();
    var ftype = myfile.getMimeType();

    var indexOfFirst = ftype.indexOf(mimetype);


var fname = myname.replace("source", "change");
myfile.setName(fname);    
  } 
  return false;
} 

My problem is that it only works on the root folder and not on subfolders Is there a solution to allow code to run on subfolders?

Upvotes: 1

Views: 176

Answers (1)

Aaron Dunigan AtLee
Aaron Dunigan AtLee

Reputation: 2072

I assume you mean you want it to run on all files in subfolders of the original folder. If you also want to run it on subfolders of those folders, and so on, you can use a recursive solution:

Use folder.getFolders() to find the subfolders, then run the rename function on those folders:

function rename(folderId) { // Add the parameter here

  // var folderid = "<<insert your folder ID>>" // Remove this line
  
  var folder = DriveApp.getFolderById(folderid)

  var myfiles = folder.getFiles();

  while (myfiles.hasNext()) { 
  
    var myfile = myfiles.next();   
    var myname = myfile.getName();
    var ftype = myfile.getMimeType();

    var indexOfFirst = ftype.indexOf(mimetype);


    var fname = myname.replace("source", "change");
    myfile.setName(fname);    
  } 

  // Add these lines to recursively apply the function to subfolders:
  var subfolders = folder.getFolders();
  while (subfolders.hasNext()) { 
    var subfolder = subfolders.next();
    rename(subfolder.getId()); // this calls the same function, but passes the subfolder id
  }

  return false;
} 

Upvotes: 2

Related Questions