Renombrar varios archivos con condiciones

Tengo miles de archivos repartidos en diferentes carpetas dentro de una carpeta principal. Lo que quisiera hacer es quitar símbolos, guiones, puntos de más o espacios de más, etc. Coloco aquí varios ejemplos que hice a propósito, son varios archivos en formato MP3:

01.Tego Calderon - Cierren .(borrar)

02.Tego Calderon - Robin Hood .

03.Tego_Calderon_Ft_Arcangel - Hablan De .

04,--Tego Calderon - Like We (Ay Dios Mio)

005.-Tego Calderon - Si Usted Que

06. Tego Calderon - Suerte

 07.Tego _Calderon - Se _Ajuma

08. Tego Calderon - El Sitio

09. Tego Calderon - Cosas Que Pasan

100. Tego Calderon - Muralla

Todos tienen que tener espacio después del "." del 01, 02,... Pero tenemos el 005 y el 100. Y creo que alli entra una condición, porque puede haber dos o tres números (hay casos en el que no hay pero no lo puse) quitar secuencia de dos guiones o dos puntos seguidos y dejar solo uno. Quitar el espacio antes y después del nombre del archivo. Y quitar los guiones bajos y reemplazarlos por espacios. Algo de VB entiendo, pero estoy fuera de práctica

2 respuestas

Respuesta

Creo que se podría hacer con un bat pero hay que concretar muy bien las condiciones. Por ejemplo:

1. Sustituir "--" por "-"

2. Sustituir ".." por "."

3. Sustituir "_" por " " (espacio)

4. Si los tres primeros caracteres conforman un número mayor que 99 el cuarto carácter debe ser un punto.

Etc.

Y concretar esas condiciones creo que será indispensable independientemente del tipo de programación que se quiera usar para hacer el renombrado de los archivos (BAT, VB, etc.)

Gracias por la respuesta. Por ahí, me es más familiar el vb, pero no se si sera la funcion REN dentro de un IF o IF ELSE o CASE... ya perdí el hilo de su uso. Dentro de algun bucle.

Insisto en que con independencia del lenguaje que se quiera utilizar para hacer el trabajo es indispensable tener muy bien definidas las condiciones de los cambios. Por ejemplo no me queda totalmente claro si:

04,--Tego Calderon - Like We (Ay Dios Mio)

Debe pasar a ser:

04. Tego Calderon - Like We (Ay Dios Mio)

O si:

005.-Tego Calderon - Si Usted Que

Debe convertirse en:

05. Tego Calderon - Si Usted Que

Son dos casos un poco difíciles de "tipificar"

Hola. Sí, la idea sería algo como esa que ud citó: "04. Tego Calderon - Like We (Ay Dios Mio)" Porque lo que quiero es sacar los guiones bajos, puntos repetidos, doble guiones y esto "04.Tego..." (que haya espacio entre ellos)

Me has respondido a la primera duda pero no a la segunda. Y hablando de esta segunda, seguramente sería más sencillo adoptar con carácter general un número de cifras único para representar la parte numérica del nombre. Si no pasa de 999 serían 3, en todo caso, 001, 002,..., 010, 011,..., 098, 099, 100, 101,... De esta forma te evitarías el tener que comprobar el "valor" de ese campo antes de decidir con cuantas cifras se representa.

Y, a mi modo de ver, parece haber algunas incoherencias en lo que decías en tu mensaje inicial. Decías "Quitar el espacio antes y después del nombre del archivo" pero también "Todos tienen que tener espacio después del "." Del 01, 02,...". Si lo entiendo bien, este último espacio de después del "." es el mismo que se debe quitar porque está antes del nombre del archivo.

Por ahí me enrredé solo.

Un desastre sería:

0 01.-nombre_de_cancion--nombre_de_interprete _

Objetivo:

01. Nombre De Canción - Nombre De Interprete (aunque este "01. N..." es una opción, puede ser "01- N..." o "01 - N...") Lo que no debe estar es: "01.N..." ni 01-N..." o sea juntos

Lo de los tracks que lleguen a 999 no lo manejare, ya que manejare el orden que traiga cada carpeta (pueden ser 8, 10, 15, 20, 44 track, etc)

No te he vuelto a decir nada por dos razones. La primera que he estado fuera de casa sin portátil y no me conectaba a Internet. La segunda que tengo algunos problemillas de salud que, afortunadamente, parece que se van pasando.

He decidido que ya es hora de ofrecerte algo para que te hagas una idea de lo que se puede hacer con un BAT de MSDOS. Es éste:

@echo off
Setlocal EnableDelayedExpansion
set carpeta=d:\carpeta prueba
for /f  "tokens=* delims=" %%a in ('dir /s /b "%carpeta%"') do (
   set nombre=%%~na
   set nuevo=!nombre:,=.!
   set nuevo=!nuevo:--= !
   set nuevo=!nuevo:_= !
   set nuevo=!nuevo:00=0!
   set nuevo=!nuevo:_= !
   Echo ren %carpeta%\"%%a" "!nuevo!.mp3"
)

Obviamente no resuelve algunos de tus problemas, pero es solo para que te hagas una idea. Tal como está solo sacaría el echo del comando de renombrado para que puedas ver si la sintaxis cumple parte de tus necesidades. Cuando cumpla las expectativas eliminamos el ECHO para que haga el REN. No he conseguido resolver todavía la inserción de un espacio entre el NN. Y el nombre de la pista (en los casos en que no hubiera ese espacio). Pruébalo si quieres asignando a la variable CARPETA la ubicación de tu carpeta real (o, mejor, una de pruebas)

He mejorado mi propuesta (y he corregido algunos errores). Creo que este bat ya podría resultarte útil:

@echo off
Setlocal EnableDelayedExpansion
set carpeta=d:\carpeta prueba
for /f  "tokens=* delims=" %%a in ('dir /s /b "%carpeta%"') do (
   set nombre=%%~na
   set nuevo=!nombre:,=.!
   set nuevo=!nuevo:--= !
   set nuevo=!nuevo:_= !
   set nuevo=!nuevo:00=0!
   set nuevo=!nuevo:  = !
   set car3=!nuevo:~3,1!
   if "!car3!"=="-" set nuevo=!nuevo:~0,3!!nuevo:~4!
   if not "!car3!"==" " set nuevo=!nuevo:~0,3! !nuevo:~3!
   if not "!nombre!"=="!nuevo!" echo ren "%%a" "!nuevo!.mp3"
)

Como antes de momento se limita a presentar el comando de renombrado (comando REN) sin ejecutarlo para que puedas ver si es correcto lo que ofrece. Una vez validado el comando bastaría con eliminar la palabra "echo" del último IF

¿Qué pasó con esto? ¿Has probado algo o ha dejado de interesarte?

Deduzco que "Celulares X-pert" y "Cristian Padilla" corresponden al mismo usuario final. De modo que continúo por este hilo porque en el otro no tengo la posibilidad de responder.

Intuyo que estás ejecutando el bat desde una ventana del explorador de Windows. Si es así durante el proceso de "depuración" será conveniente que incluyas un PAUSE como último comando del BAT. Y mantén el ECHO para poder ver que comandos de renombrado propone.

Captura la ventana y ponla por aquí para que pueda echarle un vistazo.

Hola, lo copie en un bloc de notas, con .bat y lo guarde en la misma carpeta de prueba. Lo ejecuto con doble click, pero no hace nada.

Esta es la carpeta de prueba:

El .bat me quedo asi:

y me aparece el CMD esto y despues no pasa nada

No he podido contestar antes porque ando bastante ocupado.

El BAT que te proponía pretendía ajustarse lo más posible a las "especificaciones" de tu primer mensaje con algún retoque tras las aclaraciones que me facilitaste. Puedes ver en este pantallazo que, para esos casos, funcionaba razonablemente:

Puedes ver que, como te sugería, he mantenido el ECHO para que solo muestre el comando que se ejecutaría en lugar de ejecutarlo. En este otro pantallazo ya se ejecuta el comando de renombrado.

Puedes ver ahora el efecto del comando.

Pero tú lo has aplicado a un entorno diferente y, sobre todo, para el que no son válidas las "especificaciones" originales. Por eso insistía yo en concretar al máximo las "condiciones" del renombrado. Si consigues/conseguimos unas especificaciones/condiciones válidas para todos los casos se podría intentar de nuevo.

Prueba, si quieres, en un entorno de pruebas ajustado a tus primeras especificaciones y ya me contarás que te parece.

Respuesta

Lo he intentado, pero no tuve resultados. Espero no haberme equivocado, pues borre los echo y ejecuto el bat dentro de la carpeta de prueba. Abre la ventana negra, pero no veo ningún cambio.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas