Мені потрібен спосіб перейменувати всі файли в папках і вкладених папках на малі регістри.
Мені хотілося б знати, чи є спосіб зробити це лише за допомогою Windows (XP або 7)
Мені потрібен спосіб перейменувати всі файли в папках і вкладених папках на малі регістри.
Мені хотілося б знати, чи є спосіб зробити це лише за допомогою Windows (XP або 7)
Відповіді:
Перейдіть до каталогу та виконайте таку команду:
for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")
Ось поділка на випадок, якщо хтось хоче змінити / вдосконалити:
for /f
- Для кожного рядка"Tokens=*"
- Обробити кожен елемент у кожному рядку.%f in (...)
- %f
ваше ім'я змінної для кожного елемента.dir
- перераховує кожен файл та підкаталог у каталозі./l
- (параметр для dir) Використовується малі літери./b
- (параметр для dir) Використовує голий формат, лише імена файлів / каталогів, не розмір, ні заголовки./a-d
- (параметр для директорії) Ви НЕ список каталогів . ( a
означає attribute
, -
означає not
і d
означає directory
) .rename "%f" "%f"
- перейменуйте файл із власним іменем, яке фактично є нижчим регістром dir
команди та /l
комбінації.for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(додано / r до режиму).
spacetornado Renamer - це програма Windows, яка перейменовує масову кількість файлів партіями. Ви можете шукати та замінювати текст, видаляти певну кількість символів, змінювати регістр на нижню, верхню або першу літеру та додавати текст на початок чи кінець (додавати / додавати) кожного імені файлу
З Windows 7 ви можете використовувати PowerShell для цих завдань
Get-ChildItem "C:\path\to\folder" -recurse |
Where {-Not $_.PSIsContainer} |
Rename-Item -NewName {$_.FullName.ToLower()}
- Виберіть кореневу папку
- усі файли всередині кореневої папки та підпапок перейменовані
- імена папок виключені за допомогою Where {-Not $_.PSIsContainer} |
Ось правильне рекурсивне рішення командного рядка, використовуючи лише власні команди cmd.exe, які фактично працюють. Я вважаю, що це найпростіше можливе місцеве рішення:
for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"
Якщо ви готові вийти за межі нативної команди cmd.exe, то іншим варіантом є моя утиліта перейменування регулярних виразів JREN.BAT, яка підтримує параметри перетворення імен у верхній або нижній регістр. Це чистий скрипт (гібридний JScript / пакетний), який працює на будь-якій машині Windows від XP далі - не потрібні сторонні файли EXE. Повна документація вбудовується - доступ до неї здійснюється з командного рядка за допомогою jren /?
або, jren /??
якщо ви хочете, щоб вийти на сторінку.
З JREN рекурсивне рішення настільки ж просто, як:
jren "^" "" /s /l
/a-d
перемикач, і він також зменшить малі імена папок.
" D"') was unexpected at this time.
Запуск його як прямої команди працює добре, просто не працює, коли запускається як пакетний файл. Не впевнений у тому, як змусити його працювати як пакетний файл, але я подумав, що я б вирішив цю проблему.
%D
повинні змінитися , щоб %%D
і %F
в %%F
якщо помістити команду в пакетному сценарії.
Моя особиста улюблена утиліта для перейменування пакетних файлів - WildRename Cylog . Серед багатьох інших функцій він може змінити регістр імен файлів. Найкраще в WildRename - це, мабуть, те, що він підтримує регулярні вирази!
for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))
for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')
Отримує список абсолютних шляхів усіх каталогів всередині поточного (включаючи його):
C: \ Foo>
C: \ Foo \ TO.txt
C: \ Foo \ Bar \ LOWER.txt
C: \ Foo \ Bar \ Baz \ CASE.txt
for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")
Отримує список усіх імен файлів (або імен файлів і каталогів, якщо ви виймаєте /a-d
комутатор) всередині абсолютного шляху, знайденого першим циклом , і перетворює ім'я цих файлів у малі регістри.
C: \ Foo \ TO.txt
C: \ Foo \ Bar \ LOWER.txt
C: \ Foo \ Bar \ Baz \ CASE.txt
* для цього потрібні дві петлі, оскільки другий аргумент rename
повинен бути ім'ям файлу, а не абсолютним шляхом (як той, що отриманий /s
комутатором).
cmd /c "echo %cd%&
в першому for
? Це зовсім непотрібно.
echo %cd%
є для додавання поточної папки до списку абсолютних шляхів ; і cmd /c
робить &
роботу над комбінуванням команд. Я загальний нобіл щодо пакетного сценарію Windows ; якщо ви знаєте кращий спосіб, сміливо вдосконалюйте відповідь!
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower надає просту функцію, яку ви повинні мати можливість включати та викликати з пакетного файлу.
Отже, пакетний файл повторює папки / назви файлів, і зателефонуйте на цю функцію, щоб створити малу версію імені.
З http://windowsitpro.com/articles/index.cfm?articleid=81612 :
Використовуючи лише стандартні команди, я написав сценарії LwrCase.bat і LwrCase_Folder.bat, щоб перейменувати ім'я файлу в малі регістри або перейменувати всі імена файлів у папку на малі регістри.
Щоб перейменувати ім’я файлу в малі регістри, використовуйте:
[call] LwrCase FullyQualifiedFileName
Де FullyQualifiedFileName - це повністю кваліфіковане ім’я файлу, яке слід перейменовувати.
Щоб перейменувати всі назви файлів у каталозі, використовуйте:
[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]
де FullyQualifiedDirectoryName - це повністю визначений шлях до папки, а / S - необов'язковий параметр, який також буде перейменовувати імена файлів у всіх підпапках.
ПРИМІТКА: LwrCase.bat використовує перемикач / L команди DIR, який повертає малі імена.
LwrCase.bat містить:
@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
Rename %1 "%%f"
)
endlocal
LwrCase_Folder.bat містить:
@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
call LwrCase "%%f"
)
popd
endlocal
Найкращою програмою для цього в Windows є Bulk Rename Utility . Це інструмент для чоловіків. Ви навіть можете використовувати регулярний вимір для перейменування файлів та / або папок. Він також має інтеграцію оболонок (тому ви можете виконати з Провідника правою кнопкою миші), що дуже приємно. Доступні 64-бітні та 32-бітні версії.
Прийнята відповідь на це запитання, виконана loftysnake , працює для поточної директорії, але не шукає підпапки.
Соні запропонував просту модифікацію відповіді loftysnake,
щоб зробити її рекурсивною, але вона не працює, тому що, хоча rename
команда дозволяє вказати диск і шлях з ім'ям файлу1 (джерело), ім'я файлу2 (призначення) має бути лише іменем файлу . Щоб цитувати повідомлення help ( /?
),
... ви не можете вказати новий диск або шлях для вашого цільового файлу.
Але move
працює там, де rename
цього немає, тому ви можете рекурсивно перейменовувати файли в малі регістри за допомогою цієї команди:
for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")
тому що виявляється, що Move
може впоратися з шляхами до каталогу.
Наведена вище команда працює при введенні безпосередньо в командний рядок ( CMD.EXE
). Якщо ви хочете зробити це з .BAT
файлу batch ( ), ви повинні подвоїти %
символи:
for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")
І, ймовірно, ви можете залишити дужки /y
та сказати просто do move …
.
move
працював там, де rename
ні, і я думаю, що я єдиний, хто запропонував тут використовувати move
команду. Я просто взяв пропозиції @loftysnake та @sawny, і, сподіваюся, покращив їх.
move
, але зараз не можу його знайти.
Powershell
Перейдіть до dir та запустіть:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
Я переконався, що це працює. Знайдено тут: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx