@echo off
chcp 65001 >nul
title BatRenamer
setlocal enabledelayedexpansion

:start
cls
title BatRenamer
echo v. Nightly :: thewho.narod.ws
echo.
echo Эта программа пакетного переименования упростит переименование большого кол-ва файлов
echo.
echo Важно
echo Исполняемый файл программы (не ярлык) необходимо поместить в папку с целевыми файлами.
echo.
echo Режим:
echo 1. По расширению
echo 2. По совпадению в имени
echo 3. Каждое вручную
echo 0. Выйти из программы
echo.

choice /c 1230 /n /m "Выберите пункт: "
if errorlevel 4 exit
if errorlevel 3 goto mode_manual
if errorlevel 2 goto mode_name
if errorlevel 1 goto mode_ext


::первый режим
:mode_ext
cls
title BatRenamer - ввод, первый режим
echo.
echo Программа ищет целевые файлы по схеме "*.РАСШИРЕНИЕ"
echo.
:enter_ext
set "ext="
set /p "ext=Введите расширение: "
if not defined ext (
    echo Пустые расширения не буду переименовывать
    goto enter_ext
)
if "!ext:~0,1!"=="." set "ext=!ext:~1!"

if not exist "*.!ext!" (
    echo Файлы с расширением .!ext! не найдены.
    goto mode_ext
)

:enter_ext_name
set "name="
set /p "name=Введите целевое имя: "
if not defined name (
    echo Не на что переименовывать
    goto enter_ext_name
)

set "count=1"
echo.
echo Переименовываем файлы...
for %%f in (*.!ext!) do (
    if /i not "%%f"=="%~nx0" (
        echo Переименовываю "%%f" на "!name!_!count!.!ext!"
        ren "%%f" "!name!_!count!.!ext!"
		if errorlevel==1 (
			echo Ошибка, не смог переименовать "%%f" на "!name!_!count!.!ext!"
			) else (
            echo Переименовано на "!name!_!count!.!ext!"
            set /a count+=1
			)
    )
)
set /a acount=count-1
echo.
title BatRenamer - в первом режиме переименовано !acount! файлов
echo Переименовано !acount! файлов
pause
goto start

:: второй режим
:mode_name
cls
title BatRenamer - режим "найти и изменить"
echo 
echo.
:enter_search
set "search="
set /p "search=Что ищем в имени?: "
if not defined search (
echo Нечего искать
goto enter_search
)

set "ext="
set /p "ext=Расширение файлов (пусто = все расширения): "
if not defined ext set "ext=*"
if "!ext:~0,1!"=="." set "ext=!ext:~1!"

:enter_name_new
set "name="
set /p "name=Введите целевое имя: "
if not defined name (
    echo Не на что переименовывать
    goto enter_name_new
)

set "count=1"
echo.
echo Переименовываем...
for %%f in (*!search!*.!ext!) do (
    if /i not "%%f"=="%~nx0" (
        echo Переименовываю "%%f" на "!name!_!count!%%~xf"
        ren "%%f" "!name!_!count!%%~xf"
        if errorlevel==1 (
			echo Ошибка, не смог переименовать "%%f" на "!name!_!count!%%~xf"
			) else (
            echo Переименовано на "!new_name!%%~xf"
            set /a count+=1
			)
    )
)
set /a acount=count-1
echo.
title BatRenamer - во втором режиме переименовано !acount! файлов
echo Переименовано !acount! файлов
pause
goto start


::третий режим
:mode_manual
cls
title BatRenamer - ручной режим, ввод
echo.
set "ext="
set /p "ext=Введите расширение (пусто = все файлы в папке с программой): "
if not defined ext set "ext=*"
if "!ext:~0,1!"=="." set "ext=!ext:~1!"

set "count=0"
for %%f in (*.!ext!) do (
    if /i not "%%f"=="%~nx0" (
        cls
        echo.
        echo Исходное имя: "%%f"
        echo.
        set "new_name="
		echo Для пропуска оставьте поле пустым
        set /p "new_name=Новое имя: "
        if defined new_name (
            ren "%%f" "!new_name!%%~xf"
			if errorlevel==1 (
			echo Ошибка, не смог переименовать "%%f" на "!new_name!%%~xf"
			) else (
            echo Переименовано на "!new_name!%%~xf"
            set /a count+=1
			)
            timeout /t 1 >nul
        )
    )
)
cls
echo.
title BatRenamer - в третьем режиме переименовано !count! файлов
echo Переименовано файлов: !count!
pause
goto start