Уточнение про NTFS и FAT32 (добавлено 2022-12-26)Условный
for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")
поэтому не срабатывает.
Если бы это совсем не срабатывало, то вряд ли было бы выбрано лучшим
ответом на соответствующий вопрос на Super User. У меня это срабатывает на NTFS, а вот на FAT32 (проверялось на съёмном USB-накопителе) — нет. Более того, на FAT32, если имя файла укладывается в формат 8.3, при попытке переименования (не обязательно с помощью CMD.EXE, можно и в Проводнике…), меняющем только регистр символов, все символы переводятся в верхний регистр!
Вручную приходится делать Abc.jpg -> 1Abc.jpg -> abc.jpg
Так что мешает делать это не вручную?
Например, в теле цикла
(ren "%f" "to_lower_%f" && ren "to_lower_%f" "%f")
При этом, правда, будут впустую переименовываться туда-сюда файлы с именами уже в нижнем регистре. Чтобы этого избежать можно добавить перед телом цикла проверку
for %g in ("%~nxf") do if not "%f"==%g
:
for /f "delims=" %f in ('dir /l/b/a-d') do for %g in ("%~nxf") do if not "%f"==%g (ren "%f" "to_lower_%f" && ren "to_lower_%f" "%f")
Прежний совет (до правки 2022-12-25)…Чтобы этого избежать можно сделать в командном файле так:
for /f "delims=" %%f in ('dir /l/b/a-d') do for %%g in ("%%f*") do (
if /i "%%f"=="%%g" if not "%%f"=="%%g" (
ren "%%f" "to_lower_%%f" && ren "to_lower_%%f" "%%f"
)
)
И ещё: если обрабатываемая папка открыта в Проводнике, то, скорее всего (наблюдалось в случае NTFS), чтобы увидеть изменение регистра имён файлов, надо будет обновить содержимое окна.