Renomear arquivo do lote com sufixo como alfanumérico aleatório

1

Aqui está o código que renomeia todos os arquivos em uma pasta para alfanuméricos.

@echo off
setlocal disableDelayedExpansion
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for /f "eol=: delims=" %%F in ('dir /b /a-d *.jpg') do call :renameFile "%%F"
exit /b

:renameFile
setlocal enableDelayedExpansion
:retry
set "name="
for /l %%N in (1 1 8) do (
  set /a I=!random!%%36
  for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
echo if exist !name!.jpg goto :retry
endlocal & ren %1 %name%.jpg

Tudo o que você precisa fazer é copiar / colar esse código e salvá-lo no arquivo .bat e colocá-lo em qualquer pasta onde queira renomear arquivos.

Veja como funciona:

exemplo: se o nome do arquivo for lenovo-wallpaper.jpg, ele será renomeado para AF45ASLJ.JPG

O que eu quero é filename + alphanumeric.jpg

exemplo: se filename é lenovo-wallpaper.jpg então deve ser lenovo-wallpaper-adfs45fad1.jpg

    
por Dilip 09.02.2016 / 18:58

1 resposta

1

Altere as duas últimas linhas de

echo if exist !name!.jpg goto :retry
endlocal & ren %1 %name%.jpg

para

echo if exist %~n1+!name!.jpg goto :retry
endlocal & ren %1 %~n1+%name%.jpg

%~n1 obterá o nome do arquivo sem uma extensão e, em seguida, apenas adicionará um + antes do novo nome da variável.

EDIT: lote completo com letras maiúsculas da primeira letra e captura de arquivos JPG, BMP, PNG e GIF

@echo off
setlocal disableDelayedExpansion
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for /f "eol=: delims=" %%F in ('dir /b /a-d *.jpg *.png *.bmp *.gif') do call :renameFile "%%F"
exit /b

:renameFile
setlocal enableDelayedExpansion
:retry
set "name="
for /l %%N in (1 1 8) do (
  set /a I=!random!%%36
  for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
echo if exist %~n1+!name!.jpg goto :retry
call :FirstUp result %~n1
endlocal & ren %1 %result%+%name%.*

exit /b

:FirstUp
setlocal EnableDelayedExpansion
set "temp=%~2"
set "helper=##AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ"
set "first=!helper:*%temp:~0,1%=!"
set "first=!first:~0,1!"
if "!first!"=="#" set "first=!temp:~0,1!"
set "temp=!first!!temp:~1!"
(
    endlocal
    set "result=%temp%"
    goto :eof
)
    
por 09.02.2016 / 19:11