Я хочу переименовать все каталоги на определенном жестком диске (не в C:), используя заглавные буквы в каждом каталоге (так: \images
-> \Images
). К сожалению, у меня недостаточно опыта, чтобы написать это с нуля.
2 ответа
Следующий собственный пакетный скрипт переименует все каталоги на диске X: игнорируя только чтение, скрытые и системные каталоги и игнорируя точки повторной обработки. Он преобразует имена в нижний регистр, а затем использует заглавные буквы начального символа имени каталога (английские символы). Он не обрабатывает юникод в именах.
@echo off
setlocal disableDelayedExpansion
set "drive=x"
set "tempFile=%temp%\initUpper%random%.txt"
dir /s /b /l /ad-l-h-s-r %drive%:\* >"%tempFile%"
for /f "usebackq eol=: delims=" %%F in ("%tempFile%") do (
set "old=%%F"
set "new=%%~nxF"
setlocal enableDelayedExpansion
for %%C 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 if /i "!new:~0,1!" equ "%%C" set "new=%%C!new:~1!"
ren "!old!" "!new!" 2>nul || echo unable to rename !old!
endlocal
)
del "%tempFile%"
Сценарий использует временный файл из соображений производительности. Его можно изменить, чтобы FOR /F считывал выходные данные команды DIR напрямую. Но вывод может быть довольно большим, и FOR /F становится очень медленным, если набор результатов команды очень большой.
Есть много настроек, которые можно применить к команде DIR. Например:
Удалите параметр /ad
для переименования файлов и каталогов: dir /s /b /l /a-l-h-s-r
Удалите параметры /a-h-s
, чтобы включить скрытые и системные папки: dir /s /b /l /ad-l-r
Удалите параметр /l
чтобы сохранить регистр всех символов, кроме начального: dir /s /b /ad-l-h-s-r
Как упоминает Мартин Кахья Пауло в комментариях, на этот вопрос уже был дан ответ, хотя и косвенный.
Вы можете использовать отличный инструмент Space Tornado Renamer, который размещен здесь: https://superuser.com/a/65304/125301,