Мне нужен способ переименовать все файлы в папках и подпапках в нижний регистр.
Я хотел бы знать, если есть способ сделать это, используя только Windows (XP или 7)
Мне нужен способ переименовать все файлы в папках и подпапках в нижний регистр.
Я хотел бы знать, если есть способ сделать это, используя только Windows (XP или 7)
Ответы:
Перейдите в каталог и выполните следующую команду:
Вот разбивка на случай, если кто-то захочет изменить / улучшить:
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 для этих задач
- Выберите корневую папку
- все файлы внутри корневой папки и подпапок переименованы
- имена папок исключаются с
Where {-Not $_.PSIsContainer} |
источник
Вот правильное рекурсивное решение командной строки, использующее только собственные команды cmd.exe, которые действительно работают. Я считаю, что это самое простое из возможных нативных решений:
Если вы хотите выйти за рамки собственных команд cmd.exe, то другой вариант - моя утилита переименования регулярных выражений JREN.BAT, которая поддерживает параметры для преобразования имен в верхний или нижний регистр. Это чистый скрипт (гибридный JScript / batch), который изначально запускается на любой машине с Windows начиная с XP - сторонних exe-файлов не требуется. Полная документация встроена - доступ из командной строки через
jren /?
или,jren /??
если вы хотите, постраничный вывод.С JREN рекурсивное решение так же просто, как:
источник
/a-d
переключатель, и он также будет содержать имена папок в нижнем регистре." D"') was unexpected at this time.
запуск его в качестве прямой команды работает нормально, просто не работает при запуске в виде командного файла. Не уверен, как заставить его работать как пакетный файл, но подумал, что я решу проблему.%D
должны измениться , чтобы%%D
и%F
в%%F
если поместить команду в пакетном сценарии.Моя любимая утилита пакетного переименования файлов - Cylog's WildRename . Среди многих других функций, он может изменить регистр имен файлов. Самое лучшее в 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 Batch Scripting ; если вы знаете лучший способ, не стесняйтесь улучшить ответ!Вы можете использовать стратегию «замены персонажа» ...
... и так далее, для букв А-Я. Возможно, вы могли бы реализовать это в форме цикла FOR.
источник
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower предоставляет простую функцию, которую вы сможете включать и вызывать из командного файла.
Поэтому пусть пакетный файл перебирает папки / имена файлов и вызывает эту функцию для генерации строчной версии имени.
источник
С http://windowsitpro.com/articles/index.cfm?articleid=81612 :
Используя только стандартные команды, я написал сценарии LwrCase.bat и LwrCase_Folder.bat, чтобы переименовать имя файла в нижний регистр или переименовать все имена файлов в папке в нижний регистр.
Чтобы переименовать имя файла в нижний регистр, используйте:
Где FullyQualifiedFileName - полное имя файла для переименования.
Чтобы переименовать все имена файлов в каталоге, используйте:
где FullyQualifiedDirectoryName - полный путь к папке, а / S - необязательный параметр, который также будет переименовывать имена файлов во всех подпапках.
ПРИМЕЧАНИЕ. LwrCase.bat использует параметр / L команды DIR, который возвращает имена в нижнем регистре.
LwrCase.bat содержит:
LwrCase_Folder.bat содержит:
источник
Лучшая программа для этого в Windows - это Bulk Rename Utility . Это мужской инструмент. Вы даже можете использовать регулярные выражения для переименования файлов и / или папок. Он также имеет интеграцию с оболочкой (так что вы можете запустить его из проводника, щелкнув правой кнопкой мыши), что очень приятно. Доступны 64-битные и 32-битные версии.
источник
Принятый ответ на этот вопрос от loftysnake работает для текущего каталога, но не ищет подпапки. Sawny предложил простую модификацию ответа loftysnake, чтобы сделать его рекурсивным, но он не работает, потому что, хотя
rename
команда позволяет вам указать диск и путь с filename1 (источник), filename2 (место назначения) должно быть просто именем файла , Чтобы процитировать/?
сообщение помощи ( ),Но
move
работает там, гдеrename
это не так, поэтому вы можете рекурсивно переименовывать файлы в нижний регистр с помощью этой команды:потому что получается, что
Move
справляется с путями каталогов.Приведенная выше команда работает при вводе непосредственно в командную строку (
CMD.EXE
). Если вы хотите сделать это из.BAT
файла batch ( ), вы должны удвоить%
символы:И вы, вероятно, можете оставить скобки и
/y
и просто сказатьdo move …
.источник
move
сработало там, гдеrename
нет, и я думаю, что я единственный, кто предложил использоватьmove
команду здесь. Я просто взял предложения @loftysnake и @sawny и, надеюсь, немного их улучшил.move
, но я не могу найти это сейчас.Рекурсивное решение. Поместите это в файл recursiverename.cmd.
источник
Powershell
Перейдите в каталог и запустите:
Я проверил, что это работает. Найдено здесь: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx
источник