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í.