Lote para renombrar carpeta con archivo

1

Tengo una carpeta grande con muchas carpetas con algunos archivos, como este:

FOLDER
img 08-21
- japan.jpg; 
- german.jpg;
- london.jpg;

img 08-22
- caribic.jpg
- malta.jpg

ims 08-23
- center.jpg
- circle.jpg
- bike.jpg

y quiero cambiar el nombre por lotes (.bat o lo que sea para winXP cmd) a

FOLDER
01-img 08-21
- 01-japan.jpg
- 01-german.jpg
- 01-london.jpg

02-img 08-22
- 02-caribic.jpg
- 02-malta.jpg

03-ims 08-23
- 03-center.jpg
- 03-circle.jpg
- 03-bike.jpg

Quiero cambiar el nombre de la carpeta al prefijo (número) -carpeta y los archivos (en la carpeta) al prefijo (carpeta) -archivo. ¿Puede alguien por favor ayudarme?

Kenster
fuente

Respuestas:

4

El siguiente archivo por lotes debería resolver esto. Las explicaciones siguen a continuación.

@echo off
setlocal enableextensions enabledelayedexpansion
set counter=0
for /d %%d in (*) do (
    set /a counter+=1
    call :lz
    pushd %%d
    for %%f in (*) do ren "%%f" "!counter!-%%f"
    popd
    ren "%%d" "!counter!-%%d"
)
endlocal
goto :eof
:lz
set counter=000%counter%
rem adapt this to allow for three-digit numbering
set counter=%counter:~-2%
goto :eof

Básicamente esto recorre todos los directorios con

for /d %%d in (*)

los /d cambiar aquí es para hacer un bucle solo sobre directorios. El directorio actual dentro del bucle se almacena en %%d. Luego, el contador (que se establece en 0 al comienzo) se incrementa en uno y se rellena adecuadamente al comienzo con ceros si es necesario. Esto se hace mediante la llamada al :lz subrutina Dentro de esa subrutina (se encuentra al final del lote) el número de dígitos se puede cambiar en la línea

set counter=%counter:~-2%

cambiando el 2 a 3 más o menos.

Luego, el directorio se cambiará al que estamos manejando actualmente usando pushd (que tiene la bonita propiedad que podemos deshacer este directorio cambiará después usando popd ) y se realiza otro bucle, esta vez sobre los archivos dentro del directorio:

for %%f in (*) do ren "%%f" "!counter!-%%f"

que renombra los archivos y antepone el valor del contador a ellos. Los signos de exclamación alrededor del nombre de la variable del contador se denominan expansión retrasada que es necesario aquí (por qué esto es así puede leerse en help set ).

Después de cambiar el nombre de todos los archivos en el directorio, saltamos de él nuevamente y cambiamos el nombre del directorio. Nada demasiado lujoso aquí.

Joey
fuente
Buena respuesta. Buenas explicaciones también!
RJFalconer