1

El siguiente código para un botón de un explorador de archivos permite renombrar carpetas, insertándoles al final de su nombre, el número de archivos que estas contienen.

Ejemplo: Familia > Familia (18)

Pero me gustaría que se considerara no solo el número de archivos, sino también el de carpetas, es decir, que el número se refiera al número total de archivos (archivos + carpetas).

var fso = new ActiveXObject('Scripting.FileSystemObject');

function OnGetNewName(getNewNameData) {
    if (!getNewNameData.item.is_dir) return;
    return getNewNameData.newname + ' (' + fso.GetFolder(getNewNameData.item).Files.count + ')';
}

Desde ya muchas gracias por cualquier ayuda!

1
  • @Cris223511.dev no eso es javascript. Commented el 31 jul. 2023 a las 16:28

1 respuesta 1

3

Para obtener el número total de archivos (archivos + directorio) dentro de un directorio, necesitarás realizar un recorrido recursivo en el directorio y sus sub-directorios. Para ello, puedes utilizar una función recursiva que cuente los archivos y carpetas dentro de cada directorio y, finalmente, sume ambos valores para obtener el número total; tambien es posible controlar la recursividad de una funcion mediante un argumento/parametro

Ejemplo:

var fso = new ActiveXObject('Scripting.FileSystemObject');

function getTotalFilesAndFoldersCount(folder, recursive) {
    var fileCount = 0;
    var folderCount = 0;
    var subFolders = new Enumerator(folder.SubFolders);
    var files = new Enumerator(folder.Files);

    for (; !subFolders.atEnd(); subFolders.moveNext()) {
        folderCount++;
        if (recursive) {
            var subFolder = subFolders.item();
            var counts = getTotalFilesAndFoldersCount(subFolder, true);
            fileCount += counts.fileCount;
            folderCount += counts.folderCount;
        }
    }

    for (; !files.atEnd(); files.moveNext()) {
        fileCount++;
    }

    return { fileCount: fileCount, folderCount: folderCount };
}

function OnGetNewName(getNewNameData, recursive) {
    if (!getNewNameData.item.is_dir) return;

    var folder = fso.GetFolder(getNewNameData.item);
    var counts = getTotalFilesAndFoldersCount(folder, recursive);

    return getNewNameData.newname + ' (' + (counts.fileCount + counts.folderCount) + ')';
}

La función getTotalFilesAndFoldersCount realiza un recorrido recursivo de todas los sub-directorios y archivos dentro del directorio proporcionada, contando el número total de archivos y carpetas. Luego, en la función OnGetNewName, utilizamos esta función para obtener el recuento total y agregarlo al final del nombre de la carpeta.

para evaluar o no evaluar la recrusividad deberias usar algo asi:

// Para realizar una búsqueda recursiva (en subdirectorios):
var newName = OnGetNewName(getNewNameData, true);

// Para realizar una búsqueda solo en el directorio actual (no recursiva):
var newName = OnGetNewName(getNewNameData, false);
16
  • Muchas gracias @ArcanisGK507 por el tiempo y la dedicación, el script funciona perfectamente, pero él considera el total absoluto de archivos y carpetas, y yo realmente solo necesito el total de archivos y carpetas en un primer nivel, en el nivel inmediato, no sé si me hice entender. Si pudiera modificar el script para obtener este resultado más limitado le agradecería tanto, y disculpa por tanta molestia, muchas gracias!!!
    – dasota
    Commented el 31 jul. 2023 a las 14:35
  • solo quitale la recurrencia entonces... la recurrencia es un siguiente nivel ... saludos Commented el 31 jul. 2023 a las 14:38
  • Disculpe mi ignorancia, pero la recurrencia sería cuál? El bloque que comienza con for... y termina con }, porque eliminé esa parte del código y solo cuenta los archivos, no las carpetas?!?
    – dasota
    Commented el 31 jul. 2023 a las 14:47
  • la recurencia es cuando llamas a la misma funcion desde dentro de ella, dejame actualizar la respuesta. Commented el 31 jul. 2023 a las 14:49
  • 1
    Dios te ilumine siempre y te recompense por tan nobles intenciones
    – dasota
    Commented el 31 jul. 2023 a las 16:20

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.