1. Averiguar si la cuarta posición es punto(.) o guion(-) ; si es punto(.) cambiar por (-)2. Quitar las primeras 4 posiciones

Antes que nada espero que tod@s estén muy bien

Por favor a ver si me pueden ayudar necesito un PowerShell, o .bat que renombre masivamente lo siguiente:

1. Averiguar si la cuarta posición es punto(.) O guion(-) ; si es punto(.) Cambiar por (-)
2. Quitar las primeras 4 posiciones antes del punto(.)

Ej: iii. Aaaaaaa. 1368010.013-bbb-x-001e1ca.jpg

Como debería quedar así:

Paso1. Iii-aaaaaaa-1368010-013-bbb-x-001e1ca.jpg

Paso2. Aaaaaaa-1368010-013-bbb-x-001e1ca.jpg

¿Me podrán ayudar?

!

1 respuesta

Respuesta
1

No acabo de entender por qué necesitas dos pasos.

Lo que entiendo es que quieres revisar todos los nombres (o, tal vez, todos los nombres que tienen una extensión determinada, por ejemplo JPG) de los archivos de una carpeta. Si en uno de esos nombres la cuarta posición es un punto el nombre final se consigue con lo que va desde el punto hasta el final, excluyendo el punto. Con tu ejemplo si el archivo se llamaba:

Iii. Aaaaaaa. 1368010.013-bbb-x-001e1ca.jpg

Pasaría a ser:

Aaaaaaa. 1368010.013-bbb-x-001e1ca.jpg

Te sugiero que pruebes con esto:

@echo off
Setlocal EnableDelayedExpansion
set carpeta=D:\carpeta prueba
pushd %carpeta%
for /f "delims=" %%x in ('dir /b *.jpg') do (
   set nomant=%%x
   if "!nomant:~3,1!"=="." call :renom %%x
   )
popd
goto :eof
:renom
set nomnue=%1
set nomnue=%nomnue:~4%
echo ren %1 %nomnue%
goto :eof

No está muy depurado pero puede servir de punto de partida. En la variable CARPETA pones el path de la carpeta en la que quieres hacer la búsqueda y el renombrado. El ECHO del penúltimo comando del BAT es para mostrar el comando de renombrado que se ejecutaría. Una vez comprobado que es correcto se elimina la "palabra" ECHO y quedaría el comando de renombrado.
Ya me dirás.

Gracias por la información!!!

Si hace la segunda parte de quitar las primeras 4 posiciones, me salta resolver la sustitución de las puntos(.) por guiones (-) para homogenizar la estructura del nombre del archivo

Eso está claro. Pero ¿para qué se quiere homogeneizar esa estructura si luego, en el segundo paso, se van a borrar? Eso era lo que no entendía, y sigo sin entenderlo. Solo se me ocurre que en una carpeta quieras tener los archivos con los nombres homogeneizados y en otra carpeta los mismos archivos pero con nombres que supriman esos primeros cuatro caracteres.

Buenas, 

El tema es que tengo 13 mil archivos que renombrar, y debo quitar los primeros 4 caracteres y sustituir puntos por guiones Ej:

Lo que tengo:

Iii. Aaaaaaa. 1368010.013-bbb-x-001e1ca.jpg

Lo que se quiere:

Aaaaaaa-1368010-013-bbb-x-001e1ca.jpg

Creo que lo he conseguido llamando 3 .bat diferentes 
bat1, quitar primera 4 posiciones:

@echo off
set ext=jpg
for /f "tokens=*" %%f in ('dir /b /a *.%Ext%') do call :lab %%f
goto :EOF
:lab
set original=%*
set newname=%original:~4%

ren "%original%" "%newname%"
goto :eof

bat2, quitar punto:

@echo off
for /R "." %%a in (*.jpg) do (SET ruta=%%a&SET original=%%~nxa&CALL :renombrar)
pause
:renombrar
set original=%original:.=-%

ren "%ruta%" "%original%"

ren *. *.jpg (aqui le vuelvo a dar el punto (.) de la extension .jpg

goto:eof


bat3, quitar las ultimas posiciones, (ya que se me crean del bat2)
@echo off
set ext=jpg
rem ext es la extension de los archivos sin anteponer punto.
set sacar=4
rem sacar es la cantidad de letras al final del nombre que quieres sacar.
for /f "tokens=*" %%f in ('dir /b /a *.%ext%') do call :lab %%f
exit
:lab
set original=
set original=%*
set newname=
call set newname=%%original:.%ext%=%%
call set newname=%%newname:~0,-%sacar%%%.%ext%
if "%newname%"==".%ext%" (goto :eof)
ren "%original%" "%newname%"
goto :eof
bat llamada, (con esto llamo la ejecución de los bat 1,2,3)

 @echo off
call 1_quitar_4_primeras_posiciones.bat
call 2_quitar_punto.bat
call 3_quitar_4_ultimas_posiciones.bat

No es funcional, pero de momento logra hacer el requerimiento, 
De antemano muchas gracias!!!

Si te he entendido bien estas son las "especificaciones" del BAT:

1. Eliminar los cuatro primeros caracteres de los nombres de todos los archivos con una determinada extensión (JPG, pero configurable)

2. En el nuevo nombre resultante sustituir todos los puntos por un guión (solo en el nombre, mantener el de la extensión)

3. Renombrar los archivos con el nuevo nombre.

Si es así este BAT podría hacer el trabajo:

@echo off
Setlocal EnableDelayedExpansion
set ext=jpg
set carpeta=D:\carpeta prueba
pushd %carpeta%
for /f "delims=" %%x in ('dir /b *.%ext%') do  call :renom %%~nx
popd
goto :eof
:renom
set nomorig=%*
set nomnue=%nomorig:~4%
set nomnue=%nomnue:.=-%
echo ren %nomorig%.%ext% %nomnue%.%ext%
goto :eof

Por supuesto en la variable CARPETA puedes poner el path de la carpeta sobre la que quieres que se actúe. Y el ECHO te permitirá ver si el renombrado sería el correcto antes de quitarlo para que sea efectivo.

Aprovecho para sugerirte que utilices la herramienta "snippet" de la página para poner los "códigos". Se abre con el icono "<>" de la barra de herramientas de la propia página, el tercer icono empezando desde la derecha. Creo que facilita la lectura al separarla del texto normal.

Ya me dirás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas