17 de febrero de 2011

Renombrador masivo y generador de listados

RenombraYLista

Hace tiempo que no actualizaba este blog, hoy les traigo un programa que les puede resultar muy útil... o no :-P. Lo llamo Renombra y Lista porque tiene dos funciones principales: Renombrador masivo de archivos y Generador de listados de archivos y/o carpetas.

Al ejecutarlo se muestra la ventana que se ve arriba, donde uno puede elegir el directorio donde va a hacer una de las dos funciones. Les mostraré primero la función de renombrador de archivos.


Renombrador masivo de archivos

Yo suelo subir comics, a los cuales a todos les pongo en el nombre, la leyenda del nombre de mi blog howtoarsenio.blogspot.com. Además les suelo colocar un número para que queden ordenados en la carpeta.

Primero vamos a la carpeta donde está lo que quiero renombrar. Voy hasta el directorio, selecciono (con el mouse y la tecla Ctrl o la tecla Shift) los archivos que quiero renombrar (se pueden usar los botones de selección) y luego vamos al paso 2 con el botón de Siguiente.

Renombrador

En la siguiente pantalla tengo que elegir la máscara que usará para el nombre (por defecto [N]) y la máscará para la extensión (por defecto [E])... quizás a alguno le sonará el parecido con el renombrador que usa el Total Commander (de ahí tomé el ejemplo). Luego hay otros botones para ayudar a generar la máscara de “renombre”, como el de Rango ([N#-#], que al apretarlo mostrará para seleccionar el rango de lo que queremos incluir) o el de Contador ([C] para generar un contador para cada archivo). Además se pueden usar “literales”, que son palabras que las usa como van.

Paso2
Para mostrarles el uso de todas ellas, veamos el siguiente ejemplo de como quiero que queden los archivos, usando la máscara:

Dax #[C] - [N11-40].howtoarsenio.blogspot.com

Lo que no está entre “[“ y “]” son los literales, por lo que siempre pondrá lo mismo, el [C] (contador) se configura en los controles “Definir contador”, donde se le da el valor de inicio, el incremento y la cantidad de caracteres que debe completar. El [N11-40] significa que tomará de cada nombre original de archivo desde el caracter 11 al 40 (al apretar en el botón de Rango se permite seleccionar usando el nombre original más largo).

Rango

La extensión no la modifico [E], quedando la que viene en cada archivo, pero se podría hacer lo mismo que con el nombre.

UsandoMascara

Ahora, muchas veces pasa que no quedan todos los archivos bien, como nos gustaría (como ejemplo el primer archivo), por lo que se pueden editar los nombres “manualmente”, apretando en el botón Editar nombres. Se abrirá un editor (tambien realizado por mi) donde se pueden editar los nombres de los archivos.

EditarManualmente

Al aceptar se valida que exista la misma cantidad de líneas (nombres de archivos) que había originalmente.

Luego solo queda apretar el botón de Renombrar. Modifica los archivos con los nombres de la columna Nuevo Nombre y si todo sale bien aparece el mensaje:

RenombracionExitosa

Al volver hacia atras muestra como quedaron los archivos ya modificados y se pueden seleccionar más o pasar al siguiente paso para generar listados.

LuegoDeRenombrar

Hay un paso que no expliqué, que es lo de asociar directorios y modificar los archivos internamente. Esto se usa, por ejemplo, cuando hay que modificar archivos html. Cuando uno guarda una página web, se genera el html y una carpeta con los archivos asociados (imágenes, etc), si uno modifica el nombre del html los links se “pierden” ya que apuntan al nombre “original” de la carpeta.

Al asociar carpeta, valida que cada archivo a renombrar tenga una carpeta asociada (normalmente con “_files” detras) y al marcar “Modificar archivo internamente”, cuando Renombra modifica los links internos, cambiando el nombre original por el nuevo.

Actualmente esta función no soporta espacios ni caracteres especiales... igualmente no sería muy dificil agregarle esta funcionalidad.




Generador de Listados de archivos y carpetas

La segunda función del programa es la de generar listados de carpetas y/o archivos. Por ejemplo, para hacer una base de datos de comics yo necesito buscar en dvds los comics guardados y hacer un listado de los mismos.

Algo “manual” podría hacerse con la funciones de MS-DOS Tree o para los archivos usar el Dir, pero lo que resulta luego hay que hacerle muchos cambios para que quede bien. Por lo que hice mi propio programa para eso.

Desde la pantalla principal, apretamos en Listados y abre la siguiente ventana con el directorio que teníamos, el cual se puede cambiar.

Generar Listados

Lo que hará será generar un listado (en un archivo txt o en el portapapeles) poniendo los nombres de los directorios y/o archivos usando las reglas que elijamos, la mayoría creo que son entendibles, pero vamos a ver un “repaso” de las mismas indicando los “pasos” que realiza (como se ve es un proceso recursivo).
  1. Del directorio actual obtiene una lista de carpetas y de archivos.
  2. Imprime un nombre por línea (sea directorio o archivo)
  3. Si es directorio, lista como árbol e incluye subcarpetas, repite desde el paso 1.
  4. Luego de listar el contenido de la carpeta actual (directorios y archivos), si no lista como árbol e incluye subcarpetas recorre las carpetas y va llamando desde el paso 1.
Opciones:




  • Incluir directorios: significa que imprime el nombre del directorio, con las opciones del grupo Carpetas.


  • Incluir archivos: significa que imprime el nombre de los archivos, con las opciones del grupo Archivos.


  • Incluir extensiones: solo lo hace cuando se incluyen archivos, y es si imprime la extensión o no.


  • Incluir subcarpetas: significa que por cada carpeta que encuentra repite el proceso desde el punto 1. El orden en que lo hace está determinado si se chequea Listar como árbol o no.


  • Ruta completa en directorios y archivos: imprime solo el nombre o incluye toda la ruta completa.


  • Ignora carpetas vacías: si una carpeta no tiene archivos, no imprime el nombre de la carpeta, pero si tiene más carpetas internamente y se elije Incluir subcarpetas si lista su interior.


  • Listar como árbol: esto es lo más práctico, significa que imprime de cada carpeta que encuentra, su “contenido” antes que seguir con el resto de las carpetas. Si no está chequeado lista todo de la carpeta actual, luego va a la primera carpeta y repite el proceso. Esto se verá mejor en los ejemplos.


  • Caracteres de nivel, Usar tabs y Usar espacios: Es lo que usará para cada “nivel” del árbol, se puede personalizar los caracteres a usar o una cantidad de espacios o de tabulaciones (esto último ideal para pasar a un archivo de Excel).


  • Opciones de Carpetas y de Archivos: se pueden modificar si se elije incluir algunas de estas. Indica si va a incluir un Prefijo y/o un Sufijo antes de cada nombre (en el ejemplo las carpetas estarán rodeadas por corchetes) y si los nombres los pasa a mayúsculas, minúsculas o los deja como estan.
    Para las carpetas se puede chequear que agregue la cantidad de archivos que contiene internamente (no subcarpetas).


  • Archivos a incluir: por defecto incluye todos “*.*”, pero se pueden elegir máscaras para que solo incluya determinados tipos de archivos, como “*.txt” (archivos de texto) o “M*.*” (archivos que comiencen con M) o “*.cb*” (archivos de comics cbz o cbr).


  • Al generar el listado copiar al portapapeles: luego de generarlo, abre automáticamente el editor del programa con su contenido y además lo copia al portapapeles (como para pegarlo en otro archivo), si está destildado hay que elegir un archivo donde guardará el listado.



  • Ejemplo de impresión con las opciones actuales:
    [CROSSOVER] (2)
      Superman Vs Spiderman.cbr
      Wolverine The Punisher.cbr
      [PLANET HULK] (21)
        01 - The Incredible Hulk #88 - Peace in our time I.cbr
        02 - The Incredible Hulk #89 - Peace in our time II.cbr
        03 - The Incredible Hulk #90 - Peace in our time III.cbr
        04 - The Incredible Hulk #91 - Peace in our time IV.cbr
    O solo con listado de carpetas, como árbol:
    CrossOver (2)
      Planet Hulk (21)
      World War Hulk (48)
    Iron-Man (1)
    Marvel2099 (14)
      Guerra Kree - Skrull (6)
      Skrull Kill Krew (6)
    Spiderman (19)
      One More Day (4)
      The Other (12)
      Todd McFarlane (12)
      Ultimate Spiderman Vol1 (49)
      Ultimate Spiderman Vol2 (21)
    The Punisher (1)
    Ultimate X-Men (33)
    Varios (1)
      1602 (1)
      Silent War (6)
    O solo carpetas pero destildando como árbol:
    CrossOver (2)
    Iron-Man (1)
    Marvel2099 (14)
    Spiderman (19)
    The Punisher (1)
    Ultimate X-Men (33)
    Varios (1)
      Planet Hulk (21)
      World War Hulk (48)
      Guerra Kree - Skrull (6)
      Skrull Kill Krew (6)
      One More Day (4)
      The Other (12)
      Todd McFarlane (12)
      Ultimate Spiderman Vol1 (49)
      Ultimate Spiderman Vol2 (21)
      1602 (1)
      Silent War (6)
    Lo mejor es ir probando las distintas opciones, conviene probar con el portapapeles, para ver rápidamente como va quedando.


    Descargas:

    Ahora si, las descargas, del ejecutable (está doblemente comprimido para que no lo eliminen del servidor) y del código fuente (quizás a alguno le interesa para ver como hice determinadas cosas).
    Aviso: El código fue hecho en Delphi 7, pero la última compilación fue en Delphi XE (y es el código que subo), puede ser que en Delphi 7 no compile. La idea del código es que puedan tomar ejemplos, no que lo usen directamente.