Переименовать все файлы в папке в верхний регистр с помощью пакета

Есть ли способ переименовать все файлы в определенной папке в верхний регистр с пакетным файлом?
Я нашел этот код. Но он переименовывает файлы в нижний регистр. Как изменить его, чтобы переименовать в верхний регистр?

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")

2 ответа

Решение
@echo off
setlocal enableDelayedExpansion

pushd c:\some_dir

for %%f in (*) do (
   set "filename=%%~f"

   for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      set "filename=!filename:%%A=%%A!"
   )
    ren "%%f" "!filename!" >nul 2>&1
)
endlocal

Это также поместит расширение в верхний регистр.... Что для меня было проблемой... Так вот как я "сохранил" расширение как строчный...

accepted
@echo off
setlocal enableDelayedExpansion

pushd C:\WIS\Connect_Phoenix\CONNECT_FILES_FOR_UPLOAD\17Q4_PDFs

for %%f in (*) do (
   set "filename=%%~f"

   for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      set "filename=!filename:%%A=%%A!"
   )
    ren "%%f" "!filename!" >nul 2>&1
)

for /r "C:\WIS\Connect_Phoenix\CONNECT_FILES_FOR_UPLOAD\17Q4_PDFs\" %%G in (*.PDF) do ren "%%~G" *.pdf

endlocal

Это преобразует все имена файлов в каталоге в верхний регистр, не затрагивая расширение.

rename 's/^([^.]*)\.(.*)$/\U$1\E.$2/' *
Другие вопросы по тегам