Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

140
Vistas
No se puede averiguar cómo mover un archivo a una carpeta después de haber sido emparejados en función de una identificación que ambos tienen en sus nombres. Script de aplicaciones de Google.

En Google Drive, estoy tratando de comparar una identificación en un nombre de archivo con las carpetas nombradas con esa identificación y, si coinciden, mover ese archivo a esa carpeta.

Algunos de los problemas que tiene que dar cuenta el programa son:

  1. Dado que la identificación se genera a partir del nombre del cliente, no tiene una longitud establecida
  2. La identificación podría estar en cualquier parte del nombre del archivo, no solo al principio o al final
  3. Puede haber varios archivos con diferentes nombres que contengan la misma identificación, por lo que el programa debe repetirse

Cosas que hacen esto más fácil:

  1. Todas las carpetas están en la misma carpeta principal y tienen la identificación como su nombre, por lo que el programa puede usar la lista de nombres de carpetas como una lista de las identificaciones.
  2. Todos los archivos están en la misma carpeta principal y no habrá otros archivos en la carpeta, por lo que el bucle puede ejecutarse hasta que la carpeta esté vacía.

Hasta ahora he escrito un código que con éxito:

  1. Accede a ambas carpetas principales por id.
  2. Recorre la carpeta de archivos hasta que haya verificado todos los archivos y empuja los nombres de los archivos a una matriz llamada "fileNames"
  3. Recorre las carpetas y compara el nombre de la carpeta actual con los nombres de los archivos para encontrar una coincidencia, y empuja los nombres de las carpetas a una matriz llamada "childNames"

He creado dos archivos en la carpeta "archivos" para probar, "john1111_test.pdf" y "thomas2222_test.pdf", y dos carpetas en la carpeta "childName" "john1111" y "thomas2222"

La parte en la que estoy atascado es copiar el archivo a la carpeta con la que coincidió.

 var childFolder = DriveApp.getFolderById('****').getFolders(); // Folder containing folders var files = DriveApp.getFolderById('****').getFiles(); // Folder containing the files var fileNames = []; while (files.hasNext()) { var file1 = files.next(); var fName = file1.getName() Logger.log(fName); fileNames.push(fName); } var childNames = []; while (childFolder.hasNext()) { var child = childFolder.next(); var cdName = child.getName(); Logger.log(cdName); childNames.push(cdName); const match = fileNames.find(element => { if (element.includes(cdName)) { // This is the area that I am having issues with let folderMatch = childFolder.getFoldersByName(cdName); let fileMatch = files.getFilesByName(element); folderMatch.addFile(fileMatch) return true; } }); console.log(match); }

Recibo un error que dice que foldermatch.addFile no es una función. También probé cdName.addFile (elemento).

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Mover archivos

 function movingFile() { const files = DriveApp.getFolderById('1jeAihkCiA--EfAl150IXrXDUa-MhYSKY'); const folders = DriveApp.getFolderById('1xB4XTG8d1DYtthVQQqkSQCqvzv-TGWtW'); const fldrs = folders.getFolders(); let fldrNames = []; let fldrA = []; while (fldrs.hasNext()) { let fldr = fldrs.next() fldrNames.push(fldr.getName()); fldrA.push(fldr); } const fs = files.getFiles(); while (fs.hasNext()) { let file = fs.next(); let idx = fldrNames.indexOf(file.getName().slice(0,file.getName().indexOf('_'))); if(~fldrNames.indexOf(file.getName().slice(0,file.getName().indexOf('_')))) {//if folder is present move it here //SpreadsheetApp.getUi().alert(file.getName().slice(0,file.getName().indexOf('_'))); Drive.Files.update({"parents": [{"id": fldrA[idx].getId()}]}, file.getId()); } else {//if it is not then create it first and xfer let f = folders.createFolder(file.getName().slice(0,file.getName().indexOf('_'))); fldrA.push(f); Drive.Files.update({"parents": [{"id": f.getId()}]}, file.getId()); fldrNames.push(file.getName().slice(0,file.getName().indexOf('_')));//added folder name to fldrNames so that it will be used again if there are more files with that name } } }

Antes:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Después:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Necesita habilitar Drive API versión 2

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda