JavaScript - Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

 
Vista:
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 28/12/2022 12:25:53
Le agradezco de antemano por responder. Necesito un script para mover archivos de una carpeta a otra según el nombre del archivo,

es decir, si el archivo se llama: "informe número 1" que se pueda pasar de la carpeta donde se encuentra a la carpeta "informe 1" si tiene el nombre "informe número 2" pasar de la carpeta donde se encuentra a la carpeta "informe 2" y así sucesivamente, los archivos que contienen ciertas palabras se pueden mover a una carpeta determinada. Se puede hacer? Intenté implementar varios scripts pero me dan error.
El que mejor me funcionó es el siguiente pero no logro que haga lo que quiero y no sé que estoy haciendo mal
function getTheFiles() {

var dApp = DriveApp;
var folderIter = dApp.getFoldersByName("Informes");
var folder = folderIter.next();
var filesIter = folder.getFiles();
var AgustinEmmanuelDuran = folder.getFoldersByName("AGUSTIN EMMANUEL DURAN").next();

while(filesIter.hasNext()){
var file = filesIter.next();
var filename = file.getName();

if(filename = "informe AGUSTIN EMMANUEL DURAN"){
file.moveTo("AGUSTIN EMMANUEL DURAN");
}}

}
Muchas gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Marlon (90 intervenciones) el 29/12/2022 03:55:34
Y si pruebas algo como esto

1
2
3
4
5
6
7
8
var files = DriveApp.searchFiles("fullText contains 'informe'");
// Obtiene la carpeta "Informes"
var reportsFolder = DriveApp.getFolderByName("Informes");
// Itera sobre los archivos y los mueve a la carpeta "Informes"
while (files.hasNext()) {
  var file = files.next();
  file.moveTo(reportsFolder);
}

Ahi podrías cambiar los criterios de búsqueda por lo que te convenga mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 29/12/2022 04:08:11
Te agradezco pero me sale el siguiente error:TypeError: DriveApp.getFolderByName is not a function
getTheFiles @ leo.gs:4
Otra cosa, lo que plantes es que cambie todo el código por el tuyo o que lo agregue debajo?

Saludos y gracias por responder
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 29/12/2022 05:19:54
logré que el codigo funcione por fin y haga algo el problema es que mueve "todos" los archivos a la misma carpeta y no solo uno de ellos como es mi intención, que me está faltando?

function getTheFiles() {

var dApp = DriveApp;
var folderIter = dApp.getFoldersByName("Informes");
var folder = folderIter.next();
var filesIter = folder.getFiles();
var AgustinEmmanuelDuran = folder.getFoldersByName("AGUSTIN EMMANUEL DURAN").next();

while(filesIter.hasNext()){
var file = filesIter.next();
var filename = file.getName();

if(filename.search = ("informe AGUSTIN EMMANUEL DURAN")){
file.moveTo(AgustinEmmanuelDuran);
}}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Marlon (90 intervenciones) el 30/12/2022 17:49:57
Es que creo que la funcion filename.search te devuelve un array de elementos, por lo que te movera todos los archivos que coincidan con esa busqueda, mejor usa

1
DriveApp.getFilesByName("informe AGUSTIN EMMANUEL DURAN").next()

para que solamente te devuelva el primer resultado que encuentre por esa busqueda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 30/12/2022 19:15:38
Cambie el codigo de la siguiente forma:
function getTheFiles() {

var dApp = DriveApp;
var folderIter = dApp.getFoldersByName("Informes");
var folder = folderIter.next();
var filesIter = folder.getFiles();
var AgustinEmmanuelDuran = folder.getFoldersByName("AGUSTIN EMMANUEL DURAN").next();

while(filesIter.hasNext()){
var file = filesIter.next();
var filename = file.getName();

DriveApp.getFilesByName("informe AGUSTIN EMMANUEL DURAN").next()
file.moveTo(AgustinEmmanuelDuran);
}}

sigo con el mismo problema.
Sabrias porque puede ser?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Marlon (90 intervenciones) el 30/12/2022 21:30:57
Vale, entiendo que lo que quieres hacer es mover un archivo de una carpeta a otra. Yo lo que haría es una función que reciba 3 argumentos

1. El nombre del archivo que quiero mover.
2. El nombre de la carpeta donde se encuentra el archivo.
3. El nombre de la carpeta a donde se moverá el archivo.

quedaria de la siguiente forma:

1
2
3
4
5
6
7
function moveFile(fileName, folderName, destinationFolderName) {
  var dApp = DriveApp;
  var folder = dApp.getFoldersByName(folderName).next();
  var file = folder.getFilesByName(fileName).next();
  var destinationFolder = folder.getFoldersByName(destinationFolderName).next();
  file.moveTo(destinationFolder);
}

Con esto estamos creando una funcion que puede servir para pasar cualquier archivo de cualquier carpeta a otra.

Para llamar la función en tu caso seria así:

1
moveFile("Informes", "informe AGUSTIN EMMANUEL DURAN", "AGUSTIN EMMANUEL DURAN");

Pruebalo y me cuentas. Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 03/01/2023 12:46:04
Hola, muchas gracias el script funciona a las mil maravillas pero he notado que lo que necesito es poder mover archivos que contengan NO una coincidencia exacta sino algunas de las palabras que componen el nombre del mismo de lo contrario cuando son muchos archivos si alguno tiene por ejemplo un espacio (lo cual es imperceptible) no solo no lo mueve a la carpeta sino que el script se detiene, como podría hacer para que se muevan los archivos con solo unas pocas coincidencias?creo que la función era search pero no sé como usarla.

El script me quedó así:

function moveFile(fileName, folderName, destinationFolderName) {
var dApp = DriveApp;
var folder = dApp.getFoldersByName("Informes").next();
var file = folder.getFilesByName("informe AGUSTIN EMMANUEL DURAN").next();
var destinationFolder = folder.getFoldersByName("AGUSTIN EMMANUEL DURAN").next();
file.moveTo(destinationFolder);

}

Saludos y desde ya muchas gracias por tomarse la molestia de responder
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Marlon (90 intervenciones) el 04/01/2023 21:25:27
En ese caso tendrias que recorrer la colección que devuelve searchFiles

1
2
3
4
5
6
7
8
9
10
11
function moveFile(fileName, folderName, destinationFolderName) {
  var dApp = DriveApp;
  var folder = dApp.getFoldersByName(folderName).next();
  var destinationFolder = folder.getFoldersByName(destinationFolderName).next();
 
  var files = folder.searchFiles("fullText contains '" + fileName + "'");
  while (files.hasNext()) {
    var file = files.next();
    file.moveTo(destinationFolder);
  }
}

"fullText contains" es una opción que ofrece la api de Drive para indicar que el nombre del archivo contiene la palabra que estamos buscando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 05/01/2023 00:06:16
Gracias ahi ´me funcionó pero en el codigo te faltó definir filename y no me salía, menos mal que lo supe resolver, te lo resalto

function moveFile(fileName, folderName, destinationFolderName) {
var dApp = DriveApp;
var fileName = 'emmanuel';
var folder = dApp.getFoldersByName("Informes").next();
var destinationFolder = folder.getFoldersByName("AGUSTIN EMMANUEL DURAN").next();

var files = folder.searchFiles("fullText contains '" + fileName + "'");
while (files.hasNext()) {
var file = files.next();
file.moveTo(destinationFolder);
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Marlon (90 intervenciones) el 05/01/2023 20:55:16
No tenias que definirla, ese dato se esta pasando como argumento a la funcion la cual llamas asi:

1
2
3
4
5
moveFile(fileName, folderName, destinationFolderName)
 
//ejemplo:
 
moveFile(emmanuel, informes, carpeta de informes)

Por lo que si la defines nuevamente dentro de la función seria algo redundante y la función perdería su gracia de ser global para cualquier archivo, y siempre tendrás que editar esa variable cada que necesites pasar un archivo, lo cual es algo innecesario.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 05/01/2023 21:53:19
AAAAAAAAAAAAAAAAA ya entendí, muchas gracias, es que me daba error, en esa parte que me mostraste no había cambiado nada.
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 05/01/2023 22:15:40
Lo cambié como me dijiste

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function moveFile(emmanuel, informes,AgustinEmmanuelDuran){
  var dApp = DriveApp;
  var folder = dApp.getFoldersByName(informes).next();
  var destinationFolder = folder.getFoldersByName("AGUSTIN EMMANUEL DURAN").next();
 
  var files = folder.searchFiles("fullText contains '" + fileName + "'");
  while (files.hasNext()) {
    var file = files.next();
    file.moveTo(destinationFolder);
  }}
function moveFile(sola, informes,AlejandroMatiasSola) {
  var dApp = DriveApp;
  var folder = dApp.getFoldersByName(informes).next();
  var destinationFolder = folder.getFoldersByName("ALEJANDRO MATIAS SOLA").next();
 
  var files = folder.searchFiles("fullText contains '" + fileName + "'");
  while (files.hasNext()) {
    var file = files.next();
    file.moveTo(destinationFolder);
    }}

pero me sale el siguiente error:
Error
Exception: Invalid argument: name
moveFile @ mover copia.gs:13

Desde ya te agradezco la ayuda.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Marlon (90 intervenciones) el 06/01/2023 00:59:22
jajajajajaj, Vale, veo eres bastante nuevo en programación, verdad?

Bueno "moveFile" es una función. y las funciones sirven para ejecutar varias tareas en las mismas líneas de código, por ejemplo en tu caso especifico

si no se creara una función tendríamos que escribir este código una y otra vez por cada archivo que quieras mover:

1
2
3
4
5
6
7
8
var dApp = DriveApp;
  var folder = dApp.getFoldersByName(informes).next();
  var destinationFolder = folder.getFoldersByName("AGUSTIN EMMANUEL DURAN").next();
 
  var files = folder.searchFiles("fullText contains '" + fileName + "'");
  while (files.hasNext()) {
    var file = files.next();
    file.moveTo(destinationFolder);

y modificar las variables una y otra vez. Por esa razón se crearon las funciones. Ahora si ponemos el codio de arriba dentro de una funcion

1
2
3
4
5
6
7
8
9
10
11
function moveFile(fileName, folderName, destinationFolderName) {
  var dApp = DriveApp;
  var folder = dApp.getFoldersByName(folderName).next();
  var destinationFolder = folder.getFoldersByName(destinationFolderName).next();
 
  var files = folder.searchFiles("fullText contains '" + fileName + "'");
  while (files.hasNext()) {
    var file = files.next();
    file.moveTo(destinationFolder);
  }
}

De esta forma lo único que tendríamos que hacer es llamar a esa función cada vez que queramos mover uno o varios archivos dependiendo del nombre que le pases como argumentos

1
function moveFile(fileName, folderName, destinationFolderName) {

- función es una palabra reservada de JavaScript para indicar que lo que sigue después efectivamente una función y el lenguaje la tratara como tal
- moveFile es el nombre de la función.
- Los paréntesis envuelven los argumentos de la función y estos mismos están separados por comas.

Entonces creamos una función que nos evita escribir mucho código para la misma tarea. De esta forma la llamas o invocas

1
function moveFile(fileName, folderName, destinationFolderName)

Y lo único que deberías es modificar los datos en los argumentos

1
2
3
moveFile(sola, informes, AlejandroMatiasSola)
 
moveFile(emmanuel, informes,AgustinEmmanuelDuran)

Asi de simple te ahorras de re escribir código.

Entonces el codigo completo te deberia quedar de la siguiente forma:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function moveFile(fileName, folderName, destinationFolderName) {
  var dApp = DriveApp;
  var folder = dApp.getFoldersByName(folderName).next();
  var destinationFolder = folder.getFoldersByName(destinationFolderName).next();
 
  var files = folder.searchFiles("fullText contains '" + fileName + "'");
  while (files.hasNext()) {
    var file = files.next();
    file.moveTo(destinationFolder);
  }
}
 
moveFile(sola, informes, AlejandroMatiasSola)
 
moveFile(emmanuel, informes, AgustinEmmanuelDuran)

Espero me entiendas, y si tienes alguna otra duda, no dudes en preguntar. Sin embargo te recomiendo que aprendas JavaScript pues Apps Script que es la herramienta de Google esta basada en JavaScript.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por leonardo baca (13 intervenciones) el 06/01/2023 02:48:14
Como te diste cuenta que no se ni papas de programación?jaja soy contador nada que ver con esto jaja pero me llama la atención y hace muchos años me descargue e imprimi un curso de html (desde maestros del web)y es todo lo que sabía de programación pero con este tema he aprendido un poco más de java, lástima que no cuento con tiempo para ponerme más serio con el tema porque me ha gustado mucho.

Muchas gracias por la ayuda y la verdad que tiene todo el sentido la explicación es lógico que no sea eficiente como lo venía haciendo.

Muchas gracias por tu generosidad, nos vemos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por leonardo baca (13 intervenciones) el 06/01/2023 03:03:55
aparece otro error!

Error
ReferenceError: sola is not defined
(anónimo) @ mover copia.gs:13
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Marlon (90 intervenciones) el 06/01/2023 03:46:48
Bueno eso es porque le estamos pasando ese dato como si fuera una variable, cuando deberíamos pasarle texto

1
moveFile("sola", "informes", "AlejandroMatiasSola")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 06/01/2023 05:15:18
Lo modifiqué de esta forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function moveFile(fileName, folderName, destinationFolderName) {
  var dApp = DriveApp;
  var folder = dApp.getFoldersByName(folderName).next();
  var destinationFolder = folder.getFoldersByName(destinationFolderName).next();
 
  var files = folder.searchFiles("fullText contains '" + fileName + "'");
  while (files.hasNext()) {
    var file = files.next();
    file.moveTo(destinationFolder);
  }
}
 
moveFile("SOLA", "informes", "AlejandroMatiasSola")
 
moveFile("EMMANUEL", "informes", "AgustinEmmanuelDuran")

pero me sale el siguiente error:Exception: Cannot retrieve the next object: iterator has reached the end.
moveFile @ mover copia.gs:4
(anónimo) @ mover copia.gs:13

El nombre de las carpetas de destino son:
AGUSTIN EMMANUEL DURAN
ALEJANDRO MATIAS SOLA

y de los archivos a mover:
informe AGUSTIN EMMANUEL DURAN
informe ALEJANDRO MATIAS SOLA

Te lo pongo porque cuando me apareció ese error generalmente fue porque no encontraba los archivos, quizás sea ese el problema.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 06/01/2023 12:28:38
después de una pequeña modificación

1
2
3
moveFile("informe AGUSTIN EMMANUEL DURAN","informes","AGUSTIN EMMANUEL DURAN" )
 
moveFile("informe ALEJANDRO MATIAS SOLA","informes","ALEJANDRO MATIAS SOLA" )

logre que funcione pero me sigue saltando el siguiente error:

Exception: Invalid argument: name
moveFile @ mover copia.gs:3


Igual cumple su cometido pero me interesaría que no tuvieses errores.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Marlon (90 intervenciones) el 07/01/2023 00:01:11
Muestrame el codigo que tienes, a ver si puedeo ver cual es el error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con Script para mover archivos de entre carpetas de google drive automáticamente

Publicado por Leonardo (13 intervenciones) el 09/01/2023 16:29:29
Bueno;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function moveFile(fileName, folderName, destinationFolderName) {
  var dApp = DriveApp;
  var folder = dApp.getFoldersByName(folderName).next();
  var destinationFolder = folder.getFoldersByName(destinationFolderName).next();
 
  var files = folder.searchFiles("fullText contains '" + fileName + "'");
  while (files.hasNext()) {
    var file = files.next();
    file.moveTo(destinationFolder);
  }
}
 
moveFile("informe AGUSTIN EMMANUEL DURAN","informes","AGUSTIN EMMANUEL DURAN" )
 
moveFile("informe ALEJANDRO MATIAS SOLA","informes","ALEJANDRO MATIAS SOLA" )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar