Lote para renomear a pasta com o arquivo

1

Eu tenho uma pasta grande com muitas pastas com alguns arquivos, 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

e eu quero renomear por lote (.bat ou qualquer outra coisa para o cmd winXP) para

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

Eu quero renomear a pasta para o prefixo (número) -pasta e arquivos (na pasta) para prefixar (pasta) -file. Alguém pode me ajudar?

    
por Kenster 02.01.2010 / 13:08

1 resposta

4

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.

    
por 02.01.2010 / 13:26