Имя файла Cmd без расширения

Обновлено: 21.11.2024

PowerShell Получить имя файла без расширения

Если вы хотите получить имя файла без расширения в PowerShell, используйте метод System.IO.Path GetFileNameWithoutExtension().

Давайте рассмотрим пример. Если вы хотите получить имя файла, расположенное в папке D:\LogTest\Newline-FileTest.txt, используйте приведенную ниже команду

В приведенном выше скрипте PowerShell метод GetFileNameWithoutExtension() принимает путь к файлу и получает имя файла без расширения, как показано ниже

результатом приведенного выше сценария является Newline-FileTest без расширения .txt.

Примечание. Прежде чем использовать приведенный выше скрипт для получения имени файла, проверьте, существует ли файл в PowerShell!

PowerShell Получить несколько имен файлов без расширения

Если вы хотите получить несколько имен файлов без расширения в заданном каталоге, используйте командлет PowerShell Get-ChildItem, чтобы получить элементы в одном или нескольких указанных каналах местоположения, чтобы GetFileNameWithoutExtension() получить имя файла без расширения в приведенном ниже сценарии

В приведенном выше скрипте PowerShell командлет Get-ChildItem получает файлы по указанному пути и использует фильтр для получения расширения файла .csv и передает выходные данные второй команде.

Вторая команда использует ForEach-Object для перебора файлов и использует метод GetFileNameWithoutExtension() класса System.IO.Path для получения имени файла без расширения.

Выход приведенной выше команды для получения нескольких имен файлов без расширения, как показано ниже

PowerShell получает имя файла без расширения

Полезный совет: как получить дату создания файла в PowerShell!

Заключение

Метод GetFileNameWithoutExtension(), используемый для получения имени файла без расширения для заданного пути к файлу или получения нескольких имен файлов без расширения в указанной папке или текущем каталоге.

Подробнее о том, как подсчитывать строки в файле и слова в файлах с помощью PowerShell, читайте здесь.

Дополнительные темы о командах PowerShell Active Directory и основах PowerShell можно найти на домашней странице ShellGeek.

В цикле for все файлы с расширением flv отображаются, но я хочу выполнить некоторые действия с файлами, где мне нужен один раз файл без расширения и один раз с расширением. Как я мог получить эти два?

Я искал решения, но не нашел. Я настоящий новичок в пакетной обработке.

7 ответов 7

Вы можете использовать %%~nf для получения имени файла только так, как описано в справочнике по for :

Доступны следующие параметры:

Небольшое примечание: в приведенном выше примере %%f будет чем-то вроде C:\Users\Admin\Ordner\foo.flv, а %%~nf даст вам foo . Если вам нужно все, кроме расширения, используйте %%~df%%~pf%%~nf, что даст вам C:\Users\Admin\Ordner\foo

Спасибо за модификатор/описание таблицы Dirk. Мой случай заключался в получении имени файла без расширения из параметра %1 в пакетном сценарии. echo %~n1 было тем, что мне было нужно.

Если файл, который хранится в вашей переменной, на самом деле не существует, подход FOR не сработает. Один трюк, который вы можете использовать, если знаете длину расширения, берет подстроку:

-4 означает, что последние 4 цифры (предположительно .ext) будут усечены.

У меня это не работает (на Win8.1) - возможно, я неправильно понимаю это при попытке выполнить echo %f:~0,-4% в контексте примера, использованного в вопросе. Что я делаю не так?

Очевидно, это работает для "обычных" переменных, а не для переменных FOR (или, может быть, я просто не знаю правильного синтаксиса). В любом случае это будет работать в контексте примера OP: SET fl=%%f и затем echo %fl:~0,-4%

@Wolf, вам нужно установить значение переменной цикла в обычную переменную, а затем выполнить подстановку/усечение строки в обычной переменной

В более чем достаточном количестве случаев длина расширения не равна 3 или неизвестна. Вы все равно можете использовать for, даже если файл не существует, см. мой ответ.

Я тоже не знаком с Windows cmd, но попробуйте следующее:

Без цикла

Я использую это, если хочу просто удалить расширение из имени файла или переменной (без указания каких-либо каталогов или существующих файлов):

Если вы хотите удалить расширение из полного пути, используйте вместо него %%dpnf:

Пример:

(Использовать непосредственно в консоли)

Это очень поздний ответ, но я придумал его, чтобы решить конкретную проблему, с которой DiskInternals LinuxReader добавлял '.efs_ntfs' к файлам, которые он сохранял в каталогах, отличных от NTFS (FAT32):

@matan7890 Верно; оператор не указывает, что влечет за собой «Я хочу выполнить некоторые действия с файлом (файлами)» [так в оригинале], но одним из этих действий может быть их переименование, и в этом случае мой ответ является расширением принятого ответа. < /p>

Это помогло моему другу, который открыл вложение и добавил .encrypted ко всем своим файлам вместе с требованием выкупа. Очевидно, атакующий сценарий должен был быть пакетным файлом, противоположным этому, и добавить .encrypted ко всем файлам.

проголосовал, потому что вы упомянули диск, путь и расширение (%%~df%%~pf%%~nf), которые больше всего напоминают вывод %%f из исходного вопроса, а не просто< /i> имя файла без расширения (%%~nf)

Если ваша переменная является аргументом, вы можете просто использовать %~dpn (для путей) или %~n (только для имен), за которым следует номер аргумента, поэтому вам не нужно беспокоиться о разной длине расширения.< /p>

Например, %~dpn0 вернет путь к пакетному файлу без расширения, %~dpn1 будет %1 без расширения и т. д.

В то время как %~n0 вернет имя пакетного файла без его расширения, %~n1 будет %1 без пути, расширения и т. д.

Полностью это %~dpnf0, и это начинает обретать смысл, если вы присмотритесь повнимательнее:

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

Пакетное переименование расширений файлов из CMD

Мы можем изменить расширение файлов в пакетном режиме с помощью команды переименования. Например, допустим, у вас есть набор файлов с расширением .log, и вы хотите переименовать их в .txt. Вы можете сделать это с помощью приведенной ниже команды

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

Рекурсивное пакетное переименование расширений файлов

Если вы хотите рекурсивно переименовать файлы из одного расширения в другое во всех подпапках, вы можете использовать приведенную ниже команду.

Например, если вы хотите переименовать все файлы xml в файлы txt, команда будет выглядеть следующим образом

Групповое удаление расширений файлов

Приведенная ниже команда удалит расширение для файлов указанных типов.

Если вам нужен скрипт пакетного файла, его можно скачать по ссылке ниже:
Скрипт пакетного файла для массового переименования расширений файлов

Добавить префикс к именам файлов в пакетном режиме

Если вы хотите добавить какой-либо префикс к именам файлов, это можно сделать, как показано в приведенном ниже примере. Здесь мы пытаемся добавить «фото» к каждому файлу jpg в текущей папке и подпапках.

Аналогичным образом мы можем добавить число к имени файла.

Обработка имен с пробелами

Если новое имя, которое вы хотите присвоить файлам, содержит пробелы, это можно сделать, добавив двойные кавычки вокруг имени файла. Чтобы forfiles не неправильно истолковал эти двойные кавычки, вам нужно экранировать их с помощью ‘\’
Например, чтобы добавить «- pic.jpg» к каждому из файлов jpg, команда будет такой, как показано ниже.

Я хочу, чтобы переименовывались только расширения файлов, начинающиеся с имен определенного типа, как в папке, так и во вложенных папках.
Как я могу это сделать?
Например:
переименуйте все файлы, начинающиеся с имени «*-common.xml», в «*-common.xml.txt»

Другие XML-файлы следует оставить нетронутыми.

Догадался сам.

forfiles /S /M *-common.xml /C «cmd ren *-common.xml *-common.xml.txt»

Если вы используете forfiles, вам не нужно снова использовать * в части cmd.

Спасибо за подсказки :-) Можно ли также включить пробел в префикс? Я пробовал следующее:

=> Неверный синтаксис команды

=> ОШИБКА: неверный аргумент/опция…

Имя файла должно быть заключено в двойные кавычки, если оно содержит пробелы. В сообщение добавлен пример команды.

У меня есть несколько файлов с таким окончанием
(1).txt
например. file_a(1).txt
Я попробовал это
forfiles /S /M *.ext1 /C "cmd /c rename @file @fname.ext2" для переименования их в .txt
например. файл_a.txt

Вы можете мне помочь?

Неверный код «Добавить префикс к именам файлов». Когда я запустил его, он продолжает добавлять префикс ко всем файлам в папке снова и снова, пока я не уничтожу его.

У меня это сработало. Можете ли вы сказать мне, сколько файлов у вас есть в папке, в которую вы собирались добавить префикс?

Та же проблема. Я считаю, что это происходит, когда в имени файла есть специальные символы (у меня есть скобки «[]» и запятые «,».

Я только что попытался переименовать миди-файлы караоке в миди-файлы,

Это не работает, если в имени файла есть пробелы (ОС Win XP Sp3).
Но я нашел другое решение, которое работает безупречно

Спасибо миллион раз! ты спас меня

Ни один из веб-сайтов, включая этот, не упоминал о переименовании файлов путем удаления второго расширения.

Если папка содержит несколько файлов, таких как *.mo.po и *.mo в качестве расширений файлов, как мы можем выборочно переименовать *.mo.po в *.po, не затрагивая уже существующие *.mo?

Попробуйте эту команду

Это работает, только если у вас нет файлов с одинаковым именем и двумя разными расширениями.
пример: 1.mo.po и 1.mo. Вы получите сообщение об ошибке при переименовании, так как файл с таким именем уже существует.

Сообщите нам, работает ли это в вашем случае.

Вирус добавил .zwrkocj ко всем типам файлов, как мне это удалить?

Если он преобразовал такие файлы, как file.ext, в file.ext.zwrkocj, я думаю, вы можете запустить приведенную ниже команду, чтобы вернуться к исходному состоянию.

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

forfiles /S /M *.ext /C «cmd /c переименовать @file @fname»

изменил файлы на всем диске C, верно?
как указать конкретную папку и ее подпапки?
как отключить рекурсию?

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

Вы должны запустить команду в папке, которую хотите считать корневой. Если вы запустите команду из C:\, тогда да, она переименует все файлы, соответствующие указанным вами критериям имени файла.

У меня есть один вопрос.
Я создал bat-файл для переименования всех файлов в одно расширение

но это также меняет расширение моего bat-файла.
Можно ли как-то исключить bat файл.
Спасибо за помощь.

Почему бы не поместить этот bat-файл в какую-нибудь другую папку вне текущего дерева каталогов?

Отличный материал, ребята. Это, вероятно, сэкономило мне около часа работы.

Кажется, я не могу заставить работать код пробелов.
forfiles /s /m *.* /C "cmd /c переименовать @file \"(PA) @file\""

Есть ли что-то неправильное в приведенном выше коде? Это следующая ошибка «Нераспознанный токен в исходном тексте».

Мне помогло.

Я предполагаю, что что-то может быть не так, если вы скопировали команду. Особенно двойные кавычки обычно ошибаются. Я бы посоветовал ввести команду (а не копировать/вставить), она должна работать.

Может ли ошибка быть вызвана выполнением команд просто из сценария PS1? Это единственная причина, о которой я могу думать.

Ну, в итоге я написал скрипт простого инструмента в Access VBA.

Кажется, команда forfiles подошла очень близко к удовлетворению моих потребностей, но есть ли способ рекурсивно удалить префикс из набора файлов?

Пример:
TT-*.* в *.*
Я хочу удалить «TT-» из всех файлов

Есть идеи, как переименовать скрытые файлы?
Когда я запускаю команду, она не может найти файлы, потому что они имеют атрибут hidden.
Я не вижу ключ /H или аналогичный в справке по команде.

Любая помощь будет оценена по достоинству.
Спасибо.

Сначала вы можете удалить скрытый атрибут с помощью «attrib -h», а затем переименовать файл.

Я хочу добавить один набор чисел к именам файлов и иметь несколько папок, содержащих несколько файлов в каждой папке,
например, в папке 1003 есть 3 файла с такими именами, как: 1003_blue_M, 1003_Black_M, 1003_Red_S и т. д. теперь я хочу изменить имя файла на 1003_blue_M_12345, 1003_Black_M_12345, вроде мудро…. каждая папка будет иметь новый номер, который будет добавлен.. любезно предложите, как я могу заменить всю массу файлов -> в папках
Спасибо
Нияз

Я не понимаю пример изменения расширения файла конкретного файла и где применить эту команду. пл. уточнить

как сказал Уилл:
"Код "Добавить префикс к именам файлов" неверен. Когда я запустил его, он продолжает добавлять префикс ко всем файлам в папке снова и снова, пока я не уничтожу его».

Он продолжает добавлять префикс, пока вы его не убьете.
Есть ли код остановки или паузы?

Я не могу повторить это. Он останавливается после переименования всех файлов.
Возможно, у вас другие настройки в ваших случаях.

Как удалить двойные кавычки с помощью файлов forfile для сохранения в виде текстового файла. Пожалуйста, смотрите мой код ниже.

результат был таким: «FO_FullDBBackup_201509211126», 21.09.2015, 11:26:50, 20001

я хочу выглядеть так: FO_FullDBBackup_201509211126, 21.09.2015, 11:26:50, 20001

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

ren *.* *.jpg
поэтому, если у него есть 1.thm 1.thumb, он переименует первый файл 1.thm, а затем, когда он попытается переименовать 1.thumb в jpg, он скажет, что его дубликат . поэтому мне нужно переименовать что-то вроде 1-1.jpg или 1a.jpg, 1b.jpg и т. д.

заранее спасибо.

Привет, я пытался добавить префикс XTO_12345678W500_ примерно к 200 изображениям

команда будет повторять добавление (XTO_12345678W500_) до тех пор, пока имя файла не станет почти 256 символов! Затем вылетает.
Попытался добавить только 12345678W500_ и все работает.
К этому пытались добавить оставшиеся XTO_ и у него получилось снова: заполнить имя примерно до 256 (не в счет!) символов. а потом вылетает!

Я хочу изменить расширение с .exe на .pdf или .jpg без изменения свойств .exe
Может ли кто-нибудь помочь мне с этим?

forfiles /s /M *.txt /C «cmd /c переименовать @file [электронная почта защищена]»

когда я использую указанную выше команду для более чем 40 файлов в папке, она выдает ошибку с повторением имени файла с расширением .ext?
любое решение, ребята, с небольшими изменениями в приведенном выше коде, чтобы я мог переименовать сотни имен файлов, не повторяя их.

Я хочу удалить префиксы из имен файлов. Я успешно использовал следующее для переименования файлов в каталоге, но это не работает для подкаталогов
переименовать «01 — *.mp3» «/////*.mp3»

Я пробовал
forfiles /S /M 0*.mp3 /C "cmd /c rename @file \"//@fname.mp3\""

однако выдает ошибку
ОШИБКА: файлы типа «0*.mp3» не найдены.

однако dir 0*.mp3 /s работает нормально, поэтому есть файлы, соответствующие критериям

Варианты включения поиска в "" также приводят к той же ошибке. Я попробовал
forfiles /S /M "0*.mp3" /C "cmd /c rename @file \"//@fname.mp3\""

У меня есть сценарий, который переименовывает файлы и добавляет отметку времени для текущего времени. скрипт отлично работает, однако при каждом запуске он будет выполняться только для одного файла в папке. Мне нужно, чтобы он каждый раз запускался для всех файлов в папке. Что мне не хватает?
@echo off
для %%f in (*.*) do echo %%f
for /f «delims=» %%a in ('wmic OS Get localdatetime ^| find “.”') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=% dt:~6,2%
set HH=%dt:~8,2%
set Min=%dt:~10,2%
set Sec=%dt:~12, 2%
установить штамп=Д%ГГГГ%%ММ%%ДД%Т%ЧЧ%%Мин%%Сек%

Привет,
Каждое утро на работе я начинаю свой день с поиска файла, полученного накануне вечером в папке 1 и имеющего имя RetxxxxxxxDDYY (DDYY — это дата последнего рабочего дня, когда файл был создан) .

Есть ли способ скопировать последний полученный файл из папки1 в папку2 с помощью сценария, зная, что файлы, созданные каждый день, все еще находятся в этой папке.
Большое спасибо

Как изменить тип файлов на диске D?

Вирус или троян Kryptik изменил имена файлов с исходных имен файлов, включив в них .crypted. Я использовал команду удаления расширений файлов в пакетной команде, скопировал исходную строку в блокнот и изменил ее на
forfiles /S /M *. зашифровал /C «cmd /c rename @file @fname»
затем вставил его из блокнота в окно cmd
И вуаля, все файлы, которые были изменены, вернулись к исходным именам файлов. Спасибо за этот ресурс.
Спасибо, спасибо.

Вирус добавил расширение .crypted ко всем типам файлов. Как его удалить? например .doc.crypted , .ppt.crypted, jprg.cypted

я сделал ren*.* *. но я был для одного каталога, я хочу для папки и подпапки или каталога отверстия в одном пакетном файле

Спасибо, Масим!

Ваша командная строка действительно работает, помогла мне удалить все «.cryped»

У меня есть список файлов в одном каталоге, и я хочу массово изменить имена всех файлов, чтобы файлы сохранили свое исходное имя файла + уникальную метку даты и времени, например, все текущие файлы имеют имя yymmdd.cfx и 2 у меня есть расширение yymmdd.cfx_2. Мне нужно изменить все эти или, по крайней мере, файлы .cfx, чтобы иметь текущее имя файла + yyyymmddhhmmss, чтобы получить текущую уникальную временную метку.. Я не могу заставить ваш пример работать, и это сводит меня с ума.. спасибо

У меня есть клиент, который получил электронное письмо от FedEx о задержке доставки. Мы только что заказали память накануне, поэтому они открыли ее. Он выдал сообщение о программе-вымогателе, зашифровал несколько файлов .docx и изменил их расширения на .docx.crypted. Я открыл один из файлов, и он зашифрован. Они загрузили TrendMicro, и он полностью проигнорировал проблему. Я просканировал с помощью Windows Security Essentials и нашел «Ransom:HTML/tescrypt.D». Только два ПК получили это электронное письмо и зашифрованные файлы. Последующие проверки сервера и 11 других ПК не выявили проблем. Попробую некоторые из идей «расшифровки» выше. К счастью, их не так много. Появляется только в файлах на рабочем столе. Спасибо за все идеи и остерегайтесь электронных писем FedEx.

Я хочу удалить до 6 случайных расширений chrachter.
Например,
у нас есть 2 файла
как
1.jpg и 1.jpg.hgkbgt

Я хочу удалить дополнительный файл в той же папке.
1 файл .jpg останется в той же папке

Как я мог это сделать?

Кое-как Точка между телом и расширением всех песен убрана. Есть ли способ вернуть точку, кроме как по одной? Это происходит с одной полной музыкальной папкой.
Ниже приведен пример
Джудит Дарем, Дэнни Боймп3 (ВНИМАНИЕ, НЕТ ПЕРИОДА ПОСЛЕ МАЛЬЧИКА)

Я хочу переименовать файлы в подпапках как имя, которое находится в имени этой подпапки через пакетный файл.Можешь мне помочь?

Большое спасибо, мне помогло!

Я хочу изменить расширение файлов во вложенных папках. Самое главное, я не знаю ни имени файла, ни имени папки. Оба они динамические.. Что мне делать?? Вы можете мне помочь?

Заранее спасибо.

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

Я не могу использовать стороннее приложение; Я могу использовать только командную строку или powershell или что-то еще, что входит в состав Windows 2010. Я также могу использовать стандартную версию приложения Beyond Compare.

Например, мне нужно изменить:

Родительская папка — это самая нижняя общая папка в общей иерархии всех файлов, которые мне нужно изменить

У меня есть полный путь, содержащий старое имя в столбце Excel, совпадающий с полным путем, содержащим новое имя в соседнем столбце Excel. Новое имя в ячейке AB должно быть именем, которое заменяет старое имя в ячейке A2. В именах нет шаблона, и они содержат пробелы и небуквенно-цифровые символы.

Я попытался использовать «ren» и добавить ren «старый путь со старым именем», «новый путь со старым именем», но не могу заставить его работать. Самое близкое, что я сделал, это переименовать файлы в папках из командной строки в самой нижней папке и может переименовывать только файлы только в этой папке

Я сделал это, вставив команду ren со старым и новым именем из электронной таблицы в wordpad, а затем сохранив ее как .bat

Мне очень нужно было переименовать видеорасширения моего iPhone для воспроизведения в Adobe Premiere pro.
Большое спасибо.

forfiles /S /M *.jpg /C «cmd /c rename @file [email protected]»

эта команда бесконечно переименовывает имя изображения, я имею в виду, что она бесконечно добавляет префикс фотографии, я хочу добавить префикс фотографии только один раз

Спасибо. Это сработало как волшебство.

Я написал следующее, чтобы переименовать все файлы в .mp4.
Как заставить скрипт работать во всех подпапках?
Спасибо!
@echo off
ren * *.mp4

Привет, как переименовывать папки на других дисках/папках?

Как переименовать файлы в папках в имя папки с помощью командного файла?
У меня есть несколько папок с датой, указанной в ней, и внутри этого файла .xls я хочу оставить ее для родительской папки.xls

Есть ли решение для этого?

Здравствуйте! Спасибо за урок!

Как я могу изменить имена файлов только в подкаталогах и сократить имя файла до первых 4 цифр исходного имени файла? Спасибо!

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

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

Пользователи Windows

Прежде чем расширение файла можно будет удалить, необходимо включить отображение расширений файлов. По умолчанию этот параметр отключен.

Предполагая, что файл называется myfile.txt, мы удаляем его расширение, выполнив следующие действия.

    файл (а не ярлык).
  1. Выберите в меню «Переименовать».
  2. Удалите .txt из myfile.txt и нажмите Enter .
  3. Нажмите «Да» в предупреждении о том, что файл становится непригодным для использования, если вы уверены, что хотите удалить расширение имени файла.

Удаление нескольких расширений файлов

Если вы хотите удалить расширения нескольких файлов, мы рекомендуем вам войти в командную строку Windows и выполнить следующие действия.

Пользователи командной строки MS-DOS и Windows

Измените каталог на место, где находится файл. В приведенном ниже примере мы переименовываем файл «myfile.txt» в «myfile», чтобы удалить расширение файла.

Если файл уже не существует, вы не получите сообщение или сообщение "ОК", указывающее, что файл был переименован, а расширение файла было удалено.

  • Дополнительную информацию об этой команде см. на странице команды перемещения.

Удалить несколько расширений файлов

Чтобы удалить расширение всех файлов с таким же расширением, выполните следующие действия.

В приведенном ниже примере мы удаляем расширение файла для всех файлов в текущем каталоге, которые заканчиваются на .txt.

В нашем примере мы используем звездочку в качестве подстановочного знака, который сообщает командной строке, что нам нужны все имена файлов.

Пользователи Unix и Linux

В Unix-подобных операционных системах, таких как Linux, вы можете использовать команду mv для переименования отдельного файла или каталога.

Чтобы переименовать несколько файлов, вы можете использовать утилиту переименования.

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

Переименовать один файл или каталог

Измените каталог на место, где находится файл. В нашем примере ниже мы удаляем расширение файла «myfile.txt». Кроме того, этот пример выполняется из оболочки, а не через графический интерфейс.

Если операция прошла успешно, вы вернетесь в командную строку.

  • Дополнительную информацию об этой команде см. на странице команды mv.

Переименовать несколько файлов

Чтобы переименовать несколько файлов, используйте утилиту переименования. В большинстве систем он не установлен по умолчанию, но его можно установить с помощью диспетчера пакетов. В Ubuntu, Debian или Linux Mint его можно установить с помощью apt.

Общий синтаксис команды переименования следующий.

Параметр regexp – это регулярное выражение Perl. Для замены текста используйте форму регулярного выражения 's/pattern1/pattern2/'.

Параметр files указывает, какие файлы обрабатываются командой. Вы можете указать список файлов или подстановочный знак, который будет расширен оболочкой. Подстановочный знак * указывает на все файлы.

Полезные параметры включают -n (показать, какие изменения будут сделаны, но ничего не изменить), -v (показать подробный вывод) и -f (принудительно перезаписать новые файлы, если они существуют).

Например, если вы хотите удалить расширение .txt для всех файлов в текущем каталоге, вы можете выполнить следующую команду.

В приведенной выше команде параметр regexp заключен в одинарные кавычки, чтобы "защитить" строку от ее интерпретации оболочкой. Он буквально передается команде переименования.

В регулярном выражении шаблон1 — это расширение файла .txt, а шаблон2 — пустая строка, указывающая, что шаблон1 следует заменить ни с чем.

Обратная косая черта — это управляющий символ, означающий "обрабатывать следующий символ буквально". Точка должна быть экранирована, потому что, если она не экранирована, она интерпретируется переименованием как метасимвол регулярного выражения, который соответствует любому символу.

Опция -n выполняет пробный запуск, показывая, какие изменения будут внесены, но ничего не изменяя. Вывод приведенной выше команды будет выглядеть следующим образом:

Если новые имена файлов выглядят правильно, вы можете снова запустить ту же команду без параметра -n для выполнения переименования. Укажите -v, если хотите увидеть, какие файлы переименовываются.

  • Дополнительную информацию об этой команде см. на странице команды rename.

Переименовать несколько файлов, включая подкаталоги

Чтобы переименовать файлы, в том числе находящиеся в подкаталогах, используйте команду find и направьте ее вывод в команду rename, которая обрабатывает список найденных файлов.

Например, чтобы удалить расширение .txt из всех файлов в текущем каталоге и во всех подкаталогах, выполните следующую команду.

Приведенная выше команда говорит: «Рекурсивно найти все файлы в текущем каталоге и его подкаталогах, имена которых заканчиваются на .txt. Передайте эти имена файлов команде rename и замените .txt ничем». Его вывод будет выглядеть следующим образом.

Читайте также: