Con todo el tema del coronavirus se me ocurrió montar un script para facilitar la vida a los profesores que creo que puede ayudar a mucha más gente. Se basa en un script que permite copiar los contenidos de una carpeta (con jerarquía de carpetas y ficheros internos ) en una lista de carpetas (en mi caso, la lista de carpetas de los alumnos).
Esto permite copiar todo un conjunto de ficheros y carpetas a muchas carpetas diferentes. Os puedo asegurar que quita una gran cantidad de trabajo y que se puede usar en muchas situaciones.
Aquí tenéis el código:
function Copiar()
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var tocopy = DriveApp.getFolderById(sheet.getRange("B1").getValue().split("folders/")[1]);
var parentfolder = DriveApp.getFolderById(sheet.getRange("B2").getValue().split("folders/")[1]);
//Preparamos lista de ficheros a copiar
var folders = tocopy.getFolders();
var ToCopyArray = new Array();
while ( folders.hasNext() )
{
var folder = folders.next();
var files = folder.getFiles();
while( files.hasNext() )
{
var obj = new Object();
obj.folder_name = folder.getName();
obj.file = files.next();
ToCopyArray.push(obj);
}
}
//Copiamos los ficheros
var alumnos = parentfolder.getFolders();
while(alumnos.hasNext())
{
var folder = alumnos.next();
for(var i = 0 ; i < ToCopyArray.length ; ++i)
{
var name = ToCopyArray[i].folder_name;
var existfolder = folder.getFoldersByName(name);
var folder_to_be_copied = null;
if( !existfolder.hasNext() )
{
folder_to_be_copied = folder.createFolder(name);
}
else
{
folder_to_be_copied = existfolder.next();
}
var file_name = ToCopyArray[i].file.getName();
var files = folder_to_be_copied.getFilesByName(file_name);
if ( !files.hasNext() )
{
ToCopyArray[i].file.makeCopy(file_name, folder_to_be_copied);
}
}
}
}
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var tocopy = DriveApp.getFolderById(sheet.getRange("B1").getValue().split("folders/")[1]);
var parentfolder = DriveApp.getFolderById(sheet.getRange("B2").getValue().split("folders/")[1]);
//Preparamos lista de ficheros a copiar
var folders = tocopy.getFolders();
var ToCopyArray = new Array();
while ( folders.hasNext() )
{
var folder = folders.next();
var files = folder.getFiles();
while( files.hasNext() )
{
var obj = new Object();
obj.folder_name = folder.getName();
obj.file = files.next();
ToCopyArray.push(obj);
}
}
//Copiamos los ficheros
var alumnos = parentfolder.getFolders();
while(alumnos.hasNext())
{
var folder = alumnos.next();
for(var i = 0 ; i < ToCopyArray.length ; ++i)
{
var name = ToCopyArray[i].folder_name;
var existfolder = folder.getFoldersByName(name);
var folder_to_be_copied = null;
if( !existfolder.hasNext() )
{
folder_to_be_copied = folder.createFolder(name);
}
else
{
folder_to_be_copied = existfolder.next();
}
var file_name = ToCopyArray[i].file.getName();
var files = folder_to_be_copied.getFilesByName(file_name);
if ( !files.hasNext() )
{
ToCopyArray[i].file.makeCopy(file_name, folder_to_be_copied);
}
}
}
}
Aquí tenéis el link del documento para poder hacer las pruebas: script
Veréis que le he puesto un botón para ejecutar la función como expliqué en su momento
Cualquier duda que tengáis no vaciléis en hacermela llegar.
Nos vemos