1

Я хочу переименовать все каталоги на определенном жестком диске (не в C:), используя заглавные буквы в каждом каталоге (так: \images -> \Images). К сожалению, у меня недостаточно опыта, чтобы написать это с нуля.

2 ответа2

4

Следующий собственный пакетный скрипт переименует все каталоги на диске 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

0

Как упоминает Мартин Кахья Пауло в комментариях, на этот вопрос уже был дан ответ, хотя и косвенный.

Вы можете использовать отличный инструмент Space Tornado Renamer, который размещен здесь: https://superuser.com/a/65304/125301,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .