Foros del Web » Soporte técnico » Windows »

script para modificar el nombre de archivos en Windows

Estas en el tema de script para modificar el nombre de archivos en Windows en el foro de Windows en Foros del Web. Hola a todos!! no tengo mucha experiencia en escribir scripts en Windows y estoy trabajando en una aplicación en la que necesito escribir uno para ...
  #1 (permalink)  
Antiguo 22/09/2011, 03:00
Avatar de nitta_87  
Fecha de Ingreso: septiembre-2011
Ubicación: Jaén
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 2
script para modificar el nombre de archivos en Windows

Hola a todos!!

no tengo mucha experiencia en escribir scripts en Windows y estoy trabajando en una aplicación en la que necesito escribir uno para modificar el nombre de todos las imágenes jpg que contiene un directorio, eliminando dos caracteres concretos. Es decir, tengo una con varios archivos jpg con nombres de la siguiente forma:

abc-00001.jpg
abc-00002.jpg
...
abc-00015.jpg...

y lo que necesito es modificar el nombre de todos eliminando los dos primeros ceros de cada nombre, de forma que queden:

abc-001.jpg
abc-002.jpg...
etc.

He estado buscando y he visto el bucle for, y cómo utilizarlo para recorrer todos los archivos de un directorio. Y también he visto que el comando rename cambia el nombre de los archivos. Pero no sé exactamente cómo cambiar el nombre de forma que se copie el mismo eliminando sólo esos dos caracteres.

¿Alguien sabe cómo hacerlo?

Gracias de antemano!! :)
  #2 (permalink)  
Antiguo 22/09/2011, 08:12
Avatar de Okuon  
Fecha de Ingreso: septiembre-2011
Ubicación: Aquí en el tercer planeta
Mensajes: 62
Antigüedad: 9 años, 8 meses
Puntos: 13
Respuesta: script para modificar el nombre de archivos en Windows

Hace tiempo encontré un Script (autor desconocido, solo postearon el código no se mencionó ni se incluía la fuente: )

Lo modifiqué la semana pasada para cambiar el nombre de archivo por serie númerica, y que eliminé el nombre de archivo menos la serie númerica existente en los archivos.

Ahora lo ajusté para que elimine ceros según el total de ceros en el nombre de cada archivo JPG.
  • No lo modifiqué más porque no es mi especialidad ni considero importante ir más allá con la programación.
  • No funciona recursivamente (en sub-carpetas) solo opera en el directorio actual.

Si quieres renombrar otros formatos de imágenes o de cualquier archivo simplemente agregalos a la secuencia del comando DIR.

FOR /f "tokens=*" %%f in ('DIR "*.JPG" "*.PNG" "*.GIF" *.BMP" "*.DOC" "*.DOCX" "*.XLS" "*.XLSX" /B /A-D /ON ^|FINDSTR /C:"-000"') DO (Call:Clean1 "%%~nf" "%%~xf")


Cita:
@ECHO OFF &SETLOCAL &CD /D "%~DP1"

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=*" %%f in ('DIR "*.JPG" /B /A-D /ON ^|FINDSTR /C:"-000"') DO (Call:Clean1 "%%~nf" "%%~xf")
GOTO:END

:Clean1
SET e=%~2
SET e=%e:~1%
SET c="%~1.%e%"
SET n="%~1"
SET n=%n:-00=-%
SET n=%n:-000=-00%
SET n=%n:-0000=-000%
SET n=%n:-00000=-0000%
SET n=%n:-000000=-00000%
SET n=%n:~1%
SET n=%n:~,-1%
IF NOT %c%=="%n%.%e%" (REN %c% "%n%.%e%")
GOTO:EOF

:Clean2
SET e=%~2
SET e=%e:~1%
SET c="%~1.%e%"
SET n="%~1"
SET n=%n:-00=-%
SET n=%n:-000=-00%
SET n=%n:-0000=-000%
SET n=%n:-00000=-0000%
SET n=%n:-000000=-00000%
FOR %%f in ( -00 -000 -0000 -00000 ) DO (SET n=!n:%%f=!)
SET n=%n:~1%
SET n=%n:~,-1%
ECHO.!c! "%n%.%e%"
REM IF NOT %c%=="%n%.%e%" (REN %c% "%n%.%e%")
GOTO:EOF
  #3 (permalink)  
Antiguo 22/09/2011, 13:10
Avatar de Okuon  
Fecha de Ingreso: septiembre-2011
Ubicación: Aquí en el tercer planeta
Mensajes: 62
Antigüedad: 9 años, 8 meses
Puntos: 13
Respuesta: script para modificar el nombre de archivos en Windows

Modique el código anterior para que renombre sin omitir ninguna imágen JPG
ya que el código anterior requeria que se ejecutará varias veces hasta que no quedará ninguno sin renombrar. Además le hice otros ajustes.

Cita:
@ECHO OFF &SETLOCAL &CD /D "%~DP1"

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=*" %%f in ('DIR "*.JPG" /B /A-D /ON ^|FINDSTR /C:"-000"') DO (Call:Clean1 "%%~nf" "%%~xf")
GOTO:END

:Clean1
SET e=%~2
SET e=%e:~1%
SET c="%~1.%e%"
SET n="%~1"
SET n=%n:-00000000=-00%
SET n=%n:-0000000=-00%
SET n=%n:-000000=-00%
SET n=%n:-00000=-00%
SET n=%n:-0000=-00%
SET n=%n:-000=-00%
SET n=%n:-00=-0%
SET n=%n:-0=-00%
SET n=%n:~1%
SET n=%n:~,-1%
IF NOT %c%=="%n%.%e%" (REN %c% "%n%.%e%")
GOTO:EOF

:Clean2
SET e=%~2
SET e=%e:~1%
SET c="%~1.%e%"
SET n="%~1"
SET n=%n:-00000000=-00%
SET n=%n:-0000000=-00%
SET n=%n:-000000=-00%
SET n=%n:-00000=-00%
SET n=%n:-0000=-00%
SET n=%n:-000=-00%
SET n=%n:-00=-0%
SET n=%n:-0=-00%
FOR %%f in ( -0 -00 -000 -0000 -00000 -000000 -0000000 -00000000 ) DO (SET n=!n:%%f=!)
SET n=%n:~1%
SET n=%n:~,-1%
ECHO.!c! "%n%.%e%"
REM IF NOT %c%=="%n%.%e%" (REN %c% "%n%.%e%")
GOTO:EOF

:END
EXIT

Última edición por Okuon; 22/09/2011 a las 20:01
  #4 (permalink)  
Antiguo 23/09/2011, 02:44
Avatar de nitta_87  
Fecha de Ingreso: septiembre-2011
Ubicación: Jaén
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: script para modificar el nombre de archivos en Windows

Gracias por las respuestas! voy a probarlo a ver qué tal :)
  #5 (permalink)  
Antiguo 27/09/2011, 04:18
Avatar de nitta_87  
Fecha de Ingreso: septiembre-2011
Ubicación: Jaén
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: script para modificar el nombre de archivos en Windows

Hola de nuevo!!

Probé tu script Okuon, y funcionaba perfectamente.

Luego estuve intentado entender las órdenes y ví que había muchas innecesarias (por lo menos para mi caso) y lo modifiqué para simplificarlo, hasta que ha quedado de la siguiente forma:

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=*" %%f in ('DIR "*.JPG" /B /A-D /ON ^|FINDSTR /C:"-000"') DO (call:Renombrar %%f)
GOTO:END

:Renombrar
SET o="%~1"
SET i=%o:~,-10%
SET f=%o:~7%
REN %o% %i%%f%
GOTO:EOF

:END


Muchas gracias por tu respuesta!! me ayudó bastante a entender lo que hacía :)
  #6 (permalink)  
Antiguo 27/09/2011, 09:26
Avatar de Okuon  
Fecha de Ingreso: septiembre-2011
Ubicación: Aquí en el tercer planeta
Mensajes: 62
Antigüedad: 9 años, 8 meses
Puntos: 13
Respuesta: script para modificar el nombre de archivos en Windows

Como habia comentado no soy o experto en esto.
De momento sé como modificar cualquier cosa para adaptarla a mis necesidades o algo que quiero resolver completa o parcialmente mientras siempre funcione del mismo modo sin encontrarme con sorpresas. De ahí que pruebo todos los posibles eventos dónde algo puede salir mal. Sé que el BATCH tiene secuencias innecesarias pero modificarlas o quitarlas de momento no mejora nada.
Las modificaciones que le hiciste renombra solo algunos archivos, y aumenta 0's en otros infinitamente según el total de veces que ejecutes el BATCH, y también le quita el signo - (o guión medio) a los que le quitó ceros.

Elimina la secuencia de FINDSTR porque aunque no es innecesaria lo que hacia era filtrar archivos para que el Script tal como está no renombre otros archivos dada las modificaciones que se le pueden hacer. Aunque el sub-programa ("Clean1" o "Renombrar") igual trabaja sobre todos los archivos también le indico que filtre nuevamente con la secuencias de SET (SET n=%n:-00000000=-00%).

La segunda etiqueta CLEAN2 no es necesario escribirla porque la secuencia FOR y FINDSTR pasado a CLEAN1 (expandiendo únicamente nombre y extensión de archivo, sin letra de unidad ni carpetas de ahí que no funcione recursivamente además que no le indico que almacen las rutas relativas o completas con DIR /S) igual ira de arriba hasta abajo ejecutando todo los comandos si encuentran algo que hacer.

Entonces si eliminas la secuencia |FINDSTR /C:"-000" los archivos que tengan -0 aumentan únicamente dos -00 para que todos los archivos estén en el mismo rango de 100, y los que se ecuentren en el rango -001*/-009* se mantengan, y los que se encuentren el rango -0001*/-0009* o más 0's bajan hasta -001*/-009*. De este modo si encuentra archivos que al renombrarlos quedarían iguales no renombra el archivo que tiene más -0's.

Lo modiqué nuevamente.
No en serio: lo revise

Explicación: Si encuentra 0's en los nombres de archivos los suprime añadiendo 00, y añade uno o dos 0 en los archivos con uno o dos 0's. Es decir que no los renombra sino es necesario.

Cita:
@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=*" %%f in ('DIR "*.JPG" "*.PNG" "*.BMP" "*.GIF" /B /A-D /ON ^') DO (Call:CLEAN "%%~nf" "%%~xf")

:CLEAN
SET e=%~2
SET e=%e:~1%
SET c="%~1.%e%"
SET n="%~1"
SET n=%n:00000000=00%
SET n=%n:0000000=00%
SET n=%n:000000=00%
SET n=%n:00000=00%
SET n=%n:0000=00%
SET n=%n:000=00%
SET n=%n:00=0%
SET n=%n:0=00%
SET n=%n:~1%
SET n=%n:~,-1%
IF NOT %c%=="%n%.%e%" (REN %c% "%n%.%e%")
GOTO:EOF

Última edición por Okuon; 27/09/2011 a las 12:49
  #7 (permalink)  
Antiguo 29/09/2011, 13:48
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 13 años, 9 meses
Puntos: 39
Respuesta: script para modificar el nombre de archivos en Windows

Perdonen la intrumision.

Donde podria ser algo modificado

@ECHO OFF &SETLOCAL &CD /D "%~DP1"

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=*" %%f in ('DIR "*.JPG" /B /A-D /ON ^|FINDSTR /C:"-000"') DO (Call:Clean1 "%%~nf" "%%~xf")
GOTO:END

:Clean1
SET e=%~2
SET e=%e:~1%
SET c="%~1.%e%"
SET n="%~1"
SET n=%n:-00000000=-00%
SET n=%n:-0000000=-00%
SET n=%n:-000000=-00%
SET n=%n:-00000=-00%
SET n=%n:-0000=-00%
SET n=%n:-000=-00%
SET n=%n:-00=-0%
SET n=%n:-0=-00%
SET n=%n:~1%
SET n=%n:~,-1%
IF NOT %c%=="%n%.%e%" (REN %c% "%n%.%e%")
GOTO:EOF

:Clean2
SET e=%~2
SET e=%e:~1%
SET c="%~1.%e%"
SET n="%~1"
SET n=%n:-00000000=-00%
SET n=%n:-0000000=-00%
SET n=%n:-000000=-00%
SET n=%n:-00000=-00%
SET n=%n:-0000=-00%
SET n=%n:-000=-00%
SET n=%n:-00=-0%
SET n=%n:-0=-00%
FOR %%f in ( -0 -00 -000 -0000 -00000 -000000 -0000000 -00000000 ) DO (SET n=!n:%%f=!)
SET n=%n:~1%
SET n=%n:~,-1%
ECHO.!c! "%n%.%e%"
REM IF NOT %c%=="%n%.%e%" (REN %c% "%n%.%e%")
GOTO:EOF

:END
EXIT

para que al tener

xxxx-xxxx.jpg
no solo agregar o quitar ceros pero que al agregar o quitar siga una secuencia numerica

xxxx-xxxx 001.jpg
ect ect
xxxx-xxxx 010.jpg
xxxx-xxxx 011.jpg
ect
ect y no mantener los dos ceros 009 y 0011
  #8 (permalink)  
Antiguo 31/10/2011, 06:26
Avatar de nitta_87  
Fecha de Ingreso: septiembre-2011
Ubicación: Jaén
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: script para modificar el nombre de archivos en Windows

Gracias por vuestra ayuda.

He mirado y entendido vuestras modificaciones. Sin embargo, para mi caso, no son necesarias, ya que es mi propia aplicación la que genera esos archivos, siempre con el mismo formato en el nombre, y sólo ejecuto el .bat una vez, por lo que no aumentaría el número de 0s. Sin embargo he tenido en cuentra vuestras modificaciones para que siguiese funcionando si se introdujeran modificaciones en el futuro.

Un saludo y gracias de nuevo!!

Etiquetas: batch, comandos, msdos, renombrar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:17.