O arquivo de lote a seguir deve resolver isso. As explicações seguem abaixo.
@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
Basicamente, isso faz um loop em todos os diretórios com
for /d %%d in (*)
A opção /d
aqui é para loop somente nos diretórios. O diretório atual dentro do loop é armazenado em %%d
. Em seguida, o contador (que é definido como 0 no início) é incrementado em um e preenchido apropriadamente no início com zeros, se necessário. Isso é feito pela chamada à sub-rotina :lz
. Dentro dessa sub-rotina (é no final do lote) o número de dígitos pode ser alterado na linha
set counter=%counter:~-2%
alterando o 2
para 3
ou mais.
Em seguida, o diretório será alterado para o que estamos manipulando no momento usando pushd
(que tem a propriedade legal de que podemos desfazer essa alteração de diretório depois usando popd
) e outro loop é executado, desta vez sobre os arquivos dentro do diretório:
for %%f in (*) do ren "%%f" "!counter!-%%f"
que renomeia os arquivos e preenche o valor do contador para eles. Os pontos de exclamação ao redor do nome da variável do contador são os chamados expansão atrasada que é necessária aqui (por que isso pode ser lido em help set
).
Após renomear todos os arquivos no diretório, saltamos dele novamente e renomeamos o próprio diretório. Nada muito chique aqui.