2009-11-04 00:22:52 +0000 2009-11-04 00:22:52 +0000
65
65

Есть ли способ пакетного переименования файлов в строчные?

Мне нужен способ переименовать все файлы в папках и подпапках в нижний регистр.

Я хотел бы знать, есть ли способ сделать это с помощью окон only (XP или 7).

Ответы (13)

128
128
128
2012-04-14 13:25:17 +0000

Перейдите в каталог и выполните следующую команду:

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 - (параметр для dir) Do not list directories. (a - attribute, - - not и d - directory).
  • rename "%f" "%f"- переименуйте файл со своим именем, которое на самом деле прописывается в нижнем регистре командой dir и комбинацией /l.
18
18
18
2009-11-04 00:26:39 +0000

spacetornado Renamer это программа для Windows, которая переименовывает массовое количество файлов партиями. Вы можете искать и заменять текст, удалять определенное количество символов, менять регистр на нижний, верхний или заглавный, а также добавлять текст в начало или конец (append/prepend) каждого имени файла

.

12
12
12
2015-02-24 18:33:51 +0000

Начиная с Windows 7 вы могли использовать PowerShell для этих задач

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}
  • Выберите свою корневую папку
  • все files внутри корневой папки и вложенных папок переименованы в
  • имена папок исключены с помощью Where {-Not $_.PSIsContainer} |.
9
9
9
2016-07-21 22:07:04 +0000

Вот правильное решение рекурсивной командной строки, использующее только родные команды 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/batch), который запускается на родной машине Windows начиная с XP - никаких exe-файлов сторонних производителей не требуется. Полная документация встроена - доступна из командной строки через jren /?, или jren /??, если вы хотите выводить страницу.

С JREN рекурсивное решение так же просто:

jren "^" "" /s /l
6
6
6
2009-12-05 20:17:27 +0000

Моей личной любимой утилитой пакетного переименования файлов является Cylog’s WildRename . Среди многих других функций, она может изменять регистр имен файлов. Самое лучшее в WildRename, наверное, то, что она поддерживает регулярные выражения!

5
5
5
2016-05-06 15:53:33 +0000

“Рекурсивная” версия принятого ответа (что works*)

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).

3
3
3
2013-04-07 17:06:17 +0000

Вы могли бы использовать стратегию “замещения персонажа”…

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

…и так далее, для букв A-Z. Скорее всего, ее можно реализовать в виде цикла FOR.

1
1
1
2011-03-03 00:33:58 +0000

Лучшей программой для этого в Windows является Bulk Rename Utility . Это инструмент mans. Вы даже можете использовать regex для переименования файлов и/или папок. Она также имеет интеграцию с оболочкой (так что вы можете выполнить ее из проводника нажатием правой кнопки мыши), что очень мило. Доступны 64-битные и 32-битные версии.

1
1
1
2009-11-04 00:56:45 +0000

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower предоставляет простую функцию, которую вы должны иметь возможность включать и вызывать из пакетного файла.

Итак, выполните итерацию пакетного файла по папкам/именам файлов и вызовите эту функцию, чтобы сгенерировать строчную версию имени.

1
1
1
2009-12-05 19:54:00 +0000

С 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
1
1
1
2017-05-30 15:01:22 +0000

Принятый ответ на этот вопрос, по loftysnake , работает для текущей директории, но не осуществляет поиск в подкаталогах. &nbsp Sawny предложил простую модификацию ответа loftysnake , чтобы сделать его рекурсивным, но это не работает, потому что, в то время как команда rename позволяет указать диск и путь с именем файла1 (источник), имя файла2 (назначение) должно быть просто именем файла.  Чтобы процитировать сообщение справки (/?),

… вы не можете указать новый диск или путь к вашему целевому файлу.

Но move работает там, где rename нет, поэтому вы можете рекурсивно переименовывать файлы в нижний регистр с помощью этой команды:

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

, потому что получается, что Move может справиться с путями к каталогу.

Вышеприведенная команда работает при вводе непосредственно в командную строку (CMD.EXE).  если вы хотите сделать это из пакетного (.BAT) файла, вы должны удвоить символы %:

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

И вы, вероятно, можете оставить за скобками /y и сказать только do move ….

0
0
0
2014-11-06 00:08:21 +0000

Рекурсивный раствор. Поместите это в рекурсивный файл с именем.cmd…

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)
0
0
0
2016-03-30 10:50:39 +0000

Powershell

Перейдите к грязи и бегите:

dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }

Я проверил, что это работает. Найдено здесь: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx

Похожие вопросы

3
19
10
28
19