Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
List all files in a folder (Google Apps Script)
function listFilesInFolder() {
var folder = DocsList.getFolder("Maudesley Debates");
var contents = folder.getFiles();
var file;
var data;
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type"]);
for (var i = 0; i < contents.length; i++) {
file = contents[i];
if (file.getFileType() == "SPREADSHEET") {
data = [
"" + file.getId(),

This comment has been minimized.

Copy link

mike018 commented May 20, 2014

Hi Hubgit,

Is there a way also to get all files inside a sub folder? let's say in the above code, "Maudesley Debates" is the main folder then assuming that there is a sub folder named "Sub1" and "Sub2"
Sub1 and Sub2 has 3 files each inside.

so how to I append that in the spreadsheet as well..

further, is there a way that folder will be list down in a new column like

File Name | Folder Name
testfile I Maudesley Debates
testfile2 | Maudesley Debates,Sub1
testfile3 | Maudesley Debates,Sub1
testfile4 | Maudesley Debates,Sub2

so basically I want to list down all the folder the file is connected into and separate it with comma.

Hope to hear something from you the soonest as I'm really stuck with this challenge and i'm really hoping that you could help me out.

Please advise..
Thanks in advance!


This comment has been minimized.

Copy link

kishaningithub commented May 16, 2016

@mike018 You found the answer to your question? Im also facing the same issue :-(


This comment has been minimized.

Copy link

tdries commented Feb 2, 2017

I found this awesome script which is working, BUT....

Has anyone any idea how to change it so it does not stop after 5 minutes when scanning large folders? (google script time-out).

Thank you very much!!!


// TODO: Set folder ID

var folderId = 'My folder ID';

// Main function 1: List all folders, & write into the current sheet.

function listFolers(){

getFolderTree(folderId, false);


// Main function 2.

function listAll(){

getFolderTree(folderId, true);


// Get Folder Tree

function getFolderTree(folderId, listAll) {

try {

// Get folder by id

var parentFolder = DriveApp.getFolderById(folderId);

// Initialise the sheet

var file, data, sheet = SpreadsheetApp.getActiveSheet();


sheet.appendRow(["Full Path", "Name", "Date", "URL", "Last Updated", "Description", "Size"]);

// Get files and folders

getChildFolders(parentFolder.getName(), parentFolder, data, sheet, listAll);

} catch (e) {




// Get the list of files and folders and their metadata in recursive mode

function getChildFolders(parentName, parent, data, sheet, listAll) {

var childFolders = parent.getFolders();

// List folders inside the folder

while (childFolders.hasNext()) {

var childFolder =;

// Logger.log("Folder Name: " + childFolder.getName());

data = [

parentName + "/" + childFolder.getName(),








// Write


// List files inside the folder

var files = childFolder.getFiles();

while (listAll & files.hasNext()) {

var childFile =;

// Logger.log("File Name: " + childFile.getName());

data = [

parentName + "/" + childFolder.getName() + "/" + childFile.getName(),








// Write



// Recursive call of the subfolder

getChildFolders(parentName + "/" + childFolder.getName(), childFolder, data, sheet, listAll);




This comment has been minimized.

Copy link

DD2XAlpha commented Sep 7, 2017

How do I use it?


This comment has been minimized.

Copy link

PapaDocta commented Nov 27, 2017

how do I scan and return specific file type such as pdf only and ignore the rest of the files?


This comment has been minimized.

Copy link

ark9896 commented Dec 3, 2017

<TITLE></TITLE> <style> .Field {color: black; border: 1px solid #FF FFFF; background-color: #FFCC00;} .Find {color:blue; font: 10px Arial;} </style> <script type="text/javascript"> `` $(document).ready(function () { //Disable cut copy paste $('body').bind('cut copy paste', function (e) { e.preventDefault(); });
//Disable mouse right click
    return false;


</script> <script> var Fo =new ActiveXObject("Scripting.FileSystemObject"); var StrOut = new String(); var FileName = new String(); var Extention = new String();

function FindFile(FOo)
var FSo = new Enumerator(FOo.Files);
if(FileName == "" || FSo.item().name.slice(0,FSo.item().name.lastIndexOf(".")).toLowerCase().indexOf(FileName)>-1)
if(Extention == "
" || FSo.item().name.slice(FSo.item().name.lastIndexOf(".")+1).toLowerCase().indexOf(Extention)>-1){
StrOut += "<tr "+ ((i%2)? "":"bgcolor=#DDAA55") +">" + FSo.item().name + " "+ FSo.item().name +"" + FSo.item().type + "";

function Scan()
FileName = (search.value.lastIndexOf(".")>-1)? search.value.slice(0,search.value.lastIndexOf(".")):(search.value.length>0)? search.value.toLowerCase():""; //Get Searched File Name
Extention = (search.value.lastIndexOf(".")>-1)? search.value.slice(search.value.lastIndexOf(".")+1).toLowerCase():"
"; // Get Searched File Extention Name

if(path.value.length>0 && Fo.FolderExists(path.value)){
	StrOut = "<table border=0 width=100% cellspacing=0>"
	outPut.innerHTML = StrOut+"</table>";
else alert("Insert Correct Path Address");


<td colspan=2 bgcolor="#FFCC00"><div id=outPut></div></td>

for 1 //for index file <title></title>

Enter Name :

Search Result

This comment has been minimized.

Copy link

Jonkat323 commented Jan 29, 2018

Great script. Is it possible to get the listed data to start from a specific row?


This comment has been minimized.

Copy link

tractorphill commented Apr 18, 2019

For anyone having problems with the timeout issue - Check this here;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.