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

126

У меня есть куча файлов с именами с шаблоном, 99 - DescriptiveName.txtи я хотел бы убрать номер с лицевой стороны, поэтому у меня просто есть DescriptiveName.txt.

Как я могу это сделать? Могу ли я сделать это из командной строки или есть утилита, которая может это сделать?

CodeSlave
источник

Ответы:

94

Я знаю, что в своем названии вы говорите «in dos», но у меня сложилось впечатление, что вы просто ищете способ сделать это и задаетесь вопросом, является ли это лучшим способом.

Абсолютно лучшим инструментом, который я нашел для этого, является Bulk Rename Utility .

Bulk Rename Utility

Это не инструмент командной строки, но у них есть версия для командной строки, если вы действительно хотите использовать его таким образом.

Я много использовал версию GUI, и она очень мощная, очень быстрая и чрезвычайно простая в использовании.

Ох, и это бесплатно для личного использования.

Джим МакКит
источник
К сожалению, инструмент не является бесплатным для коммерческого использования :(
AntonK
Вот почему я сказал, что это бесплатно для личного использования.
Джим Маккит
2
Это супер-быстрый инструмент. Это решило мою проблему 6.000 файлов за несколько секунд, используя несколько логик поиска и замены. Это похоже на использование Notepad ++, но редактирование тысяч файлов. Отличное решение, спасибо!
Арахис
59

Небольшой скрипт PowerShell:

$args | Rename-Item -NewName { $_.Name.ToLower() -replace '\d+ - ' }

В сочетании с более сложными регулярными выражениями это может выглядеть примерно так:

ls | Rename-Item -NewName {$_ -replace '(\d+) - (.*).mp3', '$2 - $1.mp3' }

Что превращает такие вещи, как «01 - Beginning.mp3» в «Начало - 01.mp3».

Используйте -WhatIfпараметр on, Rename-Itemчтобы проверить переименования перед их выдачей.

sysrqb
источник
1
@sysrqb, пожалуйста, исследуй немного больше.
Джои
Замена не требует двух строковых выражений? Второй имеет два, первый нет. ... -replace '\d+ - ','', Кроме того, я считаю, что первый лучше, просто убрав начало с помощью регулярных выражений. Хотя я полагаю, что в начале выражения следует указывать якорь ^, чтобы он совпадал только с именами, начинающимися с цифр.
Ксалори
1
@Xalorous: Ну, вы можете просто попробовать. -replaceможет иметь только один аргумент с правой стороны, в этом случае второй является неявно пустой строкой.
Джои
Это спасло меня ... Утилита Bulk Rename просто сейчас вылетает, и я попробовал так много других решений. Это намного лучше для людей, которым комфортно с регулярным выражением. Огромное спасибо !!
Инх Су Тесоу
24

Если вы действительно хотите использовать командную строку Windows (если вы не хотите что-то скачивать), вы можете сделать это следующим образом:

dir /B > fileList.txt
for /f "tokens=1,2,3" %i in (fileList.txt) DO ren "%i %j %l" %l

Первая строка выводит список файлов в файл с именем fileList.txt. Вторая строка разделяет каждое из имен в списке на 3 части: #, «-» и остальную часть имени. Для каждого из них он выполняет команду переименования.

Zdan
источник
2
Удалите первую строку, чтобы упростить ее, и сделайте:for /f "tokens=1,2,3" %i in ('dir /B') DO ren "%i %j %l" %l
Я знаю, что это старый, но это все еще твердый ответ - только% l (% L) должен быть% k (% K) [увеличение токенов от% i (% I), поэтому я, J, K ...]
Дональд Берд
24

AntRenamer позволяет довольно легко определить шаблон переименования; Есть много уже подготовленных (и это дает предварительный просмотр действий):

AntRenamer

Бесплатно для личного и коммерческого использования.

Gnoupi
источник
19

старая школа:

Вы можете сделать DIR и перенаправить вывод в файл, как в DIR * .TXT> TEMP.BAT

Затем используйте редактор, чтобы достать то, что вам не нужно, и измените нужные вам части. Добавьте "@echo off" в качестве верхней строки, сохраните его и запустите.

оборота WireGuy
источник
Я получил ссылку на эту страницу от доктора старой школы в этом: dostips.com/DosCommandIndex.htm ; Удивительно, что вы можете сделать с (хорошим?) Старым DOS!
Ник
16

Другой вариант: Massive File Renamer

Это позволяет легко переименовывать несколько файлов и расширений файлов . Это очень быстро и просто!

Для опытных пользователей и разработчиков можно использовать регулярные выражения .

Посмотрите это в действии:

введите описание изображения здесь

IvanRF
источник
1
Кстати, как мы можем выбрать его, чтобы открыть все файлы в подпапках? У меня есть корневая папка с примерно 50 подпапками (рекурсивно) и несколькими файлами внутри них.
Pacerier
1
@Pacerier Я думаю, что средство выбора файлов Java не позволяет этого. У меня была идея разрешить выбор папки, и можно включить рекурсивный поиск. Я отмечу это и добавлю это в будущем выпуске!
IvanRF
13

Я использую инструмент Multi-переименования Total Commander (Ctrl + M) для таких вещей. Их полезный инструмент, который слишком много для подсчета, прост в использовании, а также может при необходимости использовать регулярные выражения и шаблоны. О, и это, очевидно, дает вам предварительный просмотр, прежде чем вносить какие-либо изменения.

Это третий или четвертый вопрос, на который я ответил, порекомендовав Total Commander ... Я должен получить комиссию от них ;-)

Юваль
источник
11

Инструмент, которым я доволен, - это ReNamer . Он также поддерживает сохранение правил переименования, что было полезно для меня, поскольку я много раз делал одни и те же переименования.

Ниже приведен пример того, как удалить текст перед первой чертой, но есть множество других правил, которые вы можете определить.

введите описание изображения здесь

Esko Luontola
источник
5

Я использовал Free Commander Portable (бесплатную версию), чтобы добиться хорошего эффекта:

  1. Выберите или перейдите к файлам или каталогам, чтобы переименовать
  2. Нажмите [Ctrl-M] (или Файл> Многократное переименование)
  3. заполните поля так, как вам удобно
  4. проверьте предварительный просмотр показывает, что вы ожидаете
  5. Идти!
Мэтт Уилки
источник
4

Для опытных пользователей и разработчиков, я бы предложил RegexRenamer .

Скриншот RegexRenamer

Pro-х:

  • Очень простой пользовательский интерфейс;
  • Регулярные выражения, с которыми знакомы разработчики;
  • GPLv2;

Con-х:

  • Это не командная строка! :)
bytebuster
источник
Не удалось заставить его работать рекурсивно для всех вложенных папок выбранной папки!
Luckylooke
3

Вот решение для командной строки - Java-программа, которую я написал специально, чтобы упростить работу с «шаблонами» в именах файлов. Это бесплатно и с открытым исходным кодом, так что не стесняйтесь изменять его:

RenameWand
http://renamewand.sourceforge.net/

Некоторые соответствующие примеры использования:

Отбросьте все до имени "-"в имени файла:

java -jar RenameWand.jar  "<a> - <b>"  "<b>"

Добавить 3-значный номер к имени файла, сортируя по времени последнего изменения:

java -jar RenameWand.jar  "<a>"  "<3|#FT> <a>"

Переставьте части имени файла и измените регистр:

java -jar RenameWand.jar  "<album> - <artist> - <song>.<ext>" 
                          "<artist.upper> <album.title> - <song>.<ext.lower>"
Зак Скривена
источник
3

Я обнаружил RenPhoric около месяца назад. Superb. И это бесплатно .

Нет сложного интерфейса, и я быстро смог переименовать именно так, как я хотел. Регулярное выражение способно. С тех пор больше ничего не использовал.

Умбер Ферруле
источник
2

Мне нравится WildRename Cylog . Это мощный, но простой в использовании и имеет много функций:

  1. быстрый
  2. манипуляции со струнами
  3. счетчики
  4. подстановочные
  5. обычные выражения
  6. замена
  7. случай-преобразования
  8. протоколирование
  9. симуляция (показать результаты без их фактического применения)

введите описание изображения здесь

Synetech
источник
2

Как и @zdan выше, я сделал это с помощью командной строки (используя «cmd.exe» в Windows). В моем конкретном случае потребовалось немного усилий, но небольшое исследование помогло решить проблему.

Как и zdan, я выводил список в TXT-файл, а затем использовал tokensи delimsдля соответствующего переименования файлов. В моем случае я начал со списка файлов, названных так:

name-01-02-2012.csv

Я хотел, чтобы часть даты файла была в порядке y / m / d, с частью «name» в конце, чтобы она выглядела так:

2012-01-02-name.csv

Для этого я использовал следующий код. Обратите внимание, что при этом способе учитываются ВСЕ части имени файла, включая расширение «.csv». Это обмануло меня в первый раз.

dir /B > fileList.txt
for /f "tokens=1,2,3,4,5 delims=-." %i in (fileList.txt) DO ren "%i-%j-%k-%l.%m" %l-%j-%k-%i.%m

Это tokens«части» имени файла, delimsэто разделители. Обратите внимание, что в моем случае у меня было 2 разделителя (тире и точка).

Лично меня не волнует приложение «Массовое переименование». Как уже упоминали другие, графический интерфейс ужасен и не очень интуитивно понятен. Благодаря небольшому исследованию и простому кодированию, эти вещи можно сделать гораздо быстрее и эффективнее.

gtr1971
источник
2

Забавное имя и инструмент командной строки, очень мощный, очень быстрый и чрезвычайно простой в использовании. «Найти и заменить текст» FART http://fart-it.sourceforge.net/ РАБОТАЕТ БОЛЬШОЙ! Можно переименовать слова в текстовых файлах тоже.

ИСПОЛЬЗОВАНИЕ

Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]

Options:
 -h --help          Show this help message (ignores other options)
 -q --quiet         Suppress output to stdio / stderr
 -V --verbose       Show more information
 -r --recursive     Process sub-folders recursively
 -c --count         Only show filenames, match counts and totals
 -i --ignore-case   Case insensitive text comparison
 -v --invert        Print lines NOT containing the find string
 -n --line-number   Print line number before each line (1-based)
 -w --word          Match whole word (uses C syntax, like grep)
 -f --filename      Find (and replace) filename instead of contents
 -B --binary        Also search (and replace) in binary files (CAUTION)
 -C --c-style       Allow C-style extended characters (\xFF\0\t\n\r\\ etc.)
    --cvs           Skip cvs dirs; execute "cvs edit" before changing files
 -a --adapt         Adapt the case of replace_string to found string
 -b --backup        Make a backup of each changed file
 -p --preview       Do not change the files but print the changes
slm
источник
Еще детали? Переименовывает ли он файлы ?
vonbrand
Да, -fвариант, как указано.
user1016274
2

Multi Rename Script - это альтернатива инструменту Total Commanders Multi Rename с открытым исходным кодом, который вы можете использовать с помощью скрипта. Он может использовать плагины TC для метаданных.

https://code.google.com/p/multi-rename-script/ http://multi-rename-script.googlecode.com/svn/trunk/docs/res/MRS.PNG

majkinetor
источник
2
@ эхо выключено
setlocal enabledelayedexpansion
установить X = 5
установить FOLDER_PATH =.
pushd% FOLDER_PATH%
для %% f в (*) сделать, если %% f neq% ~ nx0 (
    установить "filename = %% ~ nf"
    установить "filename =! filename: ~% X%!"
    ren "%% f" "! filename! %% ~ xf"
)
POPD

сохранить это в командном файле и запустить

bbm123
источник
Это хорошо, но как я могу сделать X переменной (передать как параметр)?
Канкан
@Kangkan вот так:set /p "X=Enter the value for X: "
Кидкик
1

Я использую Blackboard для администрирования курсов в университете. Когда я загружаю задание массово (в Blackboard щелкните верхнюю часть столбца оценок, затем «Загрузка файла подборки» Blackboard добавляет кучу дополнительных вещей к имени файла - часто делает имя файла слишком длинным, чтобы быть действительным в Windows.

Вот как они выглядят:

Recitation20Assignment_studentname_attempt_2013-03-01-20-03-09_Exercise28129.docx

И это то, что я хотел

studentname.docx

Поэтому я использовал подход, предложенный @zdan и @ gtr1971, открыв окно командной строки для папки с файлами внутри (CMD.EXE). Затем выполните эту команду, чтобы поместить все имена файлов в документ.

dir /b >filelist.txt

Отредактируйте документ и удалите имена папок и т. Д.

Используйте эту команду для замены добавленного в Blackboard имени файла только именем пользователя и расширением файла.

for /f "tokens=1,2,3,4,5,6 delims=_." %i in (filelist.txt) do ren "%i _%j_%k_%l_%m.%n" %j.%n

Надеюсь, это поможет кому-то еще.

Webmentorman
источник
1

Я разработал гибридную утилиту командной строки JScript / batch под названием JREN.BAT, которая может переименовывать файлы или папки, выполняя поиск и замену регулярных выражений по именам. Это чистый скрипт, который будет работать на любом компьютере с Windows XP и выше. Полная документация встроена в скрипт.

Если предположить, что JREN.BAT находится в вашем текущем каталоге или, что еще лучше, где-то на вашем пути, тогда ваша задача переименования становится тривиальной.

jren "^\d+[ -]+(.+)\.txt$" "$1" /i

или же

jren "^\d+[ -]+(?=.+\.)" "" /fm "*.txt"

Есть много опций, включая /Sопцию, которая рекурсивно выполняет переименование в подкаталогах.

dbenham
источник
0

Если вам нужна серьезная сила и вы хотите раскошелиться ... PowerGrep - это один из самых мощных и универсальных инструментов на рынке ... вы можете переименовать практически все с помощью PowerGrep ... даже двоичный поиск и замена ... его создал RegEx Guru, Ян Гойваертс .

введите описание изображения здесь

Эдди Б
источник
Эта утилита безумно дорогая ...
Wizard79
Вы можете использовать его бесплатно бесконечно ... однако, оно того стоит ... Я использую это все время.
Эдди Б,