We have one Shared folder. We don't know how many folders, sub folders and files and we need count for folders and files in google apps script
CodePudding user response:
I believe your goal is as follows.
- You want to count the number of folders and files in a specific folder which is the shared folder. In this case, the subfolders are included.
- You want to achieve this using Google Apps Script.
In this case, how about the following sample script?
Sample script:
Please copy and paste the following script to the script editor of Google Apps Script, and set the top folderID of the folder you want to check. And, please run myFunction
.
function myFunction() {
const countFilesFolders = (folder, obj = {files: [], folders: []}) => {
obj.folders.push(folder);
const files = folder.getFiles();
while (files.hasNext()) obj.files.push(files.next());
const folders = folder.getFolders();
while (folders.hasNext()) countFilesFolders(folders.next(), obj);
return {fileCount: obj.files.length, folderCount: obj.folders.length - 1};
}
const topFolderId = "###"; // Please set the top folder ID of the folder you want to check.
const res = countFilesFolders(DriveApp.getFolderById(topFolderId));
console.log(res)
}
When this script is run, the following result is obtained.
{ fileCount: ##, folderCount: ## }
Note:
- In this script, it supposes that you have permission for accessing the folder. Please be careful about this.
References:
CodePudding user response:
Pl try the below code from a google sheet. You will get the list of all folders / files / sub folders / files
function ListarTodo() {
// List all files and sub-folders in a single folder on Google Drive, and get the name of the activesheet to know the folder desired.
var foldername = "xxxxx"; //feed the folder name here
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Carpeta","Nombre Archivo", "Fecha ultima modificacion", "Tamaño MB", "URL", "ID", "Descripción", "Tipo archivo"]);
// getFoldersByName = Gets a collection of all folders in the user's Drive that have the given name.
// folders is a "Folder Iterator" but there is only one unique folder name called, so it has only one value (next)
var folders = DriveApp.getFoldersByName(foldername);
var foldersnext = folders.next();
var lintotal = 2;
//Iniciamos la funcion recursiva // Initiate recursive function
lintotal = SubCarpetas(foldersnext, foldername, lintotal);
}
function SubCarpetas(folder, path, cantlineas) {
cantlineas = ListarArchivos(folder, path, cantlineas);
var subfolders = folder.getFolders();
while (subfolders.hasNext()) {
var mysubfolders = subfolders.next();
var mysubfolderName = mysubfolders.getName();
var newpath = "";
newpath = path "/" mysubfolderName;
cantlineas = SubCarpetas(mysubfolders, newpath, cantlineas);
}
return(cantlineas)
}
function ListarArchivos(mifoldersnext, mipath, milintotal) {
var datos = []; //array temporal que vamos a usar para grabar en la hoja
var files = []; //array con todos los archivos que encontramos en la carpeta que estamos evaluando
var file = []; //array que usamos para volcar los datos de cada archivo antes de guardarlo
var total = 0;
var sheet = SpreadsheetApp.getActiveSheet();
var myfiles = mifoldersnext.getFiles();
// Creamos un array con los datos de cada archivo y guardamos el total de archivos
while (myfiles.hasNext()) {
files.push(myfiles.next());
total ;
}
//ordenamos el array por nombre de archivo alfabeticamente //sorts the files array by file names alphabetically
files = files.sort(function(a, b){
var aName = a.getName().toUpperCase();
var bName = b.getName().toUpperCase();
return aName.localeCompare(bName);
});
////
var vuelta = 0;
var bulk = 10; //Definimos la cantidad de lineas a grabar cada vez, en la hoja de la planilla GoogleDoc
var linea = milintotal; //definimos en que linea vamos a grabar en la planilla
for (var i = 0; i < files.length; i ) { //recorremos el array de archivos y formateamos la informacion que necesitamos para nuestra planilla
file = files[i];
var fname = file.getName(); //nombre del archivo
var fdate = file.getLastUpdated(); //fecha y hora ultima modificacion
var fsize = file.getSize()/1024/1024; //tamaño del archivo, lo pasamos de byte a Kbyte y luego a Mb
fsize = fsize.toFixed(2); //lo formateamos a dos decimales
var furl = file.getUrl(); //url del archivo
var fid = file.getId(); //id del archivo
var fdesc = file.getDescription(); //descripcion
var ftype = file.getMimeType(); //tipo de archivo
datos[vuelta] = [mipath " (" total ")", fname, fdate, fsize, furl, fid, fdesc, ftype]; //ponemos todo dentro de un array temporal
vuelta ;
if (vuelta == bulk) {//cuando alcanza la cantidad definida, guarda este array con 10 lineas y lo vacía
linea = milintotal;
// Logger.log("linea = " linea); //DEBUG
// Logger.log("vuelta = " vuelta); //DEBUG
// Logger.log("total = " total); //DEBUG
// Logger.log("lintotal = " milintotal); //DEBUG
// Logger.log("registros en datos = " datos.length); //DEBUG
// Logger.log("data = " datos); //DEBUG
sheet.getRange(linea, 1, bulk,8).setValues(datos); //guardamos los datos del array temporal en la hoja
SpreadsheetApp.flush(); //forzamos que aparezcan los datos en la hoja - sin esto los datos no aparecen hasta terminar (genera mucha impaciencia)
milintotal = milintotal vuelta;
datos = []; //vaciamos el array temporal
vuelta = 0;
}
}
if (datos.length>0) {//Al salir del bucle grabamos lo que haya quedado en el array datos
linea = milintotal;
// Logger.log("linea = " linea); //DEBUG
// Logger.log("vuelta = " vuelta); //DEBUG
// Logger.log("total = " total); //DEBUG
// Logger.log("lintotal = " milintotal); //DEBUG
// Logger.log("registros en datos = " datos.length); //DEBUG
// Logger.log("data = " datos); //DEBUG
sheet.getRange(linea, 1, datos.length,8).setValues(datos);
SpreadsheetApp.flush(); //ansiolítico
milintotal = milintotal datos.length;
datos = [];
vuelta = 0;
}
return (milintotal)
}