Следующий пакетный файл должен решить эту проблему. Пояснения следуют ниже.
@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
В основном это перебирает все каталоги с
for /d %%d in (*)
Параметр /d
здесь предназначен для зацикливания только над каталогами. Текущий каталог в цикле хранится в %%d
. Затем счетчик (который установлен в 0 в начале) увеличивается на единицу и дополняется соответствующим образом в начале нулями, если необходимо. Это делается с помощью вызова подпрограммы :lz
. Внутри этой подпрограммы (она находится в конце пакета) количество цифр может быть изменено в строке
set counter=%counter:~-2%
изменив 2
на 3
или около того.
Затем каталог будет изменен на тот, который мы сейчас обрабатываем с помощью pushd
(у него есть приятное свойство, которое мы можем отменить это изменение каталога впоследствии с помощью popd
), и выполняется другой цикл, на этот раз над файлами внутри каталога:
for %%f in (*) do ren "%%f" "!counter!-%%f"
который переименовывает файлы и добавляет к ним значение счетчика. Восклицательные знаки вокруг имени переменной счетчика представляют собой так называемое отложенное расширение, которое необходимо здесь (почему это можно прочитать в help set
).
После переименования всех файлов в каталоге мы снова выпрыгиваем из него и переименовываем сам каталог. Здесь нет ничего особенного.