@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: Ввод размера группы
set "max_sub=0"
set /p "max_sub=Введите количество фото в одной группе (например, 3): "
:: Защита от пустого ввода или нуля
if !max_sub! LEQ 0 (
echo [Отмена] Введено некорректное число.
pause
exit /b
)
echo.
:: Инициализация счетчиков (группа 1, подномер 1)
set "grp=1"
set "sub=1"
set "count=0"
:: Чтение списка файлов через dir /b /a-d гарантирует, что уже переименованные файлы не попадут в цикл повторно
for /f "delims=" %%F in ('dir /b /a-d *.jpg *.jpeg *.png *.bmp *.webp 2^>nul') do (
set "ext=%%~xF"
:: Форматирование номера группы (001, 002...)
set "g_pad=00!grp!"
set "g_pad=!g_pad:~-3!"
:: Форматирование номера внутри группы (01, 02...)
set "s_pad=0!sub!"
set "s_pad=!s_pad:~-2!"
set "new_name=!g_pad!-!s_pad!!ext!"
:: Переименование файла (если имя уже совпадает или занято — пропускаем с предупреждением)
if /i not "%%F"=="!new_name!" (
if exist "!new_name!" (
echo [Ошибка] Файл "!new_name!" уже существует. Пропуск "%%F".
) else (
ren "%%F" "!new_name!"
echo "%%F" ---^> "!new_name!"
set /a count+=1
)
)
:: Шаг счетчика: увеличиваем подномер, а при превышении лимита — переходим к следующей группе
set /a sub+=1
if !sub! GTR !max_sub! (
set "sub=1"
set /a grp+=1
)
)
echo.
if !count! EQU 0 (
echo [Инфо] Подходящих файлов для переименования не найдено.
) else (
echo [Готово] Успешно переименовано файлов: !count!.
)
pause