Пакетне перейменування файлу із суфіксом як випадкове буквено-цифрове


1

Ось код, який перейменовує всі файли в папці на буквено-цифрові.

@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

Все, що вам потрібно зробити, - скопіювати / вставити цей код і зберегти його .bat файл і розмістити у будь-яких папках, де ви хочете перейменувати файли.

Ось як це працює:

приклад: якщо ім'я файлу - lenovo-wallpaper.jpg, воно перейменовано його на AF45ASLJ.JPG

Що я хочу, це ім'я файлу + alphanumeric.jpg

приклад: якщо ім'я файлу - lenovo-wallpaper.jpg, тоді воно повинно бути lenovo-wallpaper-adfs45fad1.jpg


1
Ви не задали питання, не кажучи вже про питання програмування. Якщо у вас є проблеми з кодом, ви повинні вказати, що саме не відповідає, і як, а також яка очікувана поведінка.
dbenham

1
@dbenham Насправді у нього "проблема" з вашим кодом. Це було знято з перейменування файлу Batch з випадковою буквено-цифровою
формою

Відповіді:


1

Змініть останні два рядки з

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

до

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

%~n1отримає ім'я файлу без розширення, а потім просто додаючи +до нового імені змінної.

EDIT: Повна партія з великої літери та зйомки файлів JPG, BMP, PNG та 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
)

Невелике уточнення: якщо ви використовуєте .*нову назву, справа розширення буде збережена (тобто ren %1 %~n1+%name%.*).
AFH

@AFH Правда, я не хотів його більше змінювати (тільки .jpg файли все-таки потрапляють у цикл for) :)
Jonno

Я зрозумів це, але існуючий код перейменовує Name.JPGна Name+8chars.jpg. Цей коментар був направлений на запитання, як на вас.
AFH

@AFH Understand :)
Jonno

Чи можете ви виправити це для всіх розширень зображень, таких як jpg, gif, png, bmp?
Діліп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.