Рано или поздно почти каждый пользователь сталкивается с тем, что ему требуется выполнить массовое переименование группы файлов: иногда задача простая — например, нужно дать им имена с номерами по порядку, иногда — более сложная: к примеру, нужно изменить имена группы файлов таким образом, чтобы они имели в имени номер, дату создания, какую-либо дополнительную информацию.
Всё это можно реализовать в том или ином виде, для части сценариев достаточно встроенных средств Windows 10, 8.1 или Windows 7, иногда лучше использовать специальные программы для массового переименования файлов и папок. И те и другие методы будут рассмотрены в этой инструкции. Кстати, функции переименования группы файлов есть в наборе полезных утилит Microsoft PowerToys для Windows 10.
- Advanced Renamer — бесплатная программа для продвинутого массового переименования файлов
- Переименование группы файлов средствами Windows
- Массовое переименование группы файлов в Total Commander
- Видео инструкция
Advanced Renamer
Advanced Renamer — бесплатная программа для массового переименования файлов и папок с использованием настраиваемых шаблонов, которая может очень многое, если с нею разобраться. На официальном сайте доступна на русском языке как в виде установщика, так и portable версии (ZIP-архив, не требующий установки). Приведу пример использования Advanced Renamer для массового переименования группы файлов:
- Есть папка фотографий (но метод подойдет и для любых других типов файлов), снятых в одно время, но на разные устройства (фотоаппарат и смартфон). Часть имеют в качестве имени дату и время без пробелов, часть — номер снимка, сделанного фотоаппаратом. При этом имя файла и расширение файлов с камеры написано в верхнем регистре. Задача — привести имена группы файлов к удобному виду.
- Запускаем Advanced Renamer, затем либо перетаскиваем файлы для переименования в список по центру интерфейса, либо нажимаем кнопку «Панель папок», находим папку с нужными файлами и нажимаем кнопку «Добавить». Откроется окно, где можно задать параметры добавления: в моем случае всё оставляю как есть: нужно переименовать все файлы.
- Следующий этап — нажать «Добавить метод» в панели слева и выбрать «Новое имя» (возможны и иные методы, о них далее), чтобы определить, как именно будут переименовываться файлы. Здесь начинается самое интересное. В качестве новых имен файлов мы можем использовать предопределенные в программе теги, позволяющие легко подставлять в новые имена файлов нужную информацию. При необходимости вы можете нажать «Справка по тегам», чтобы получить более подробную информацию (правда, на английском) на официальном сайте. Но уже из краткого описания каждого тега должно быть примерно ясно, что именно они означают. Например, если в поле «Новое имя» в настройках метода я введу:
photo-<Inc Nr:1>-<Img Day>-<Img Month:X>-<Img Year:X>.jpg
то получу в результате имена файлов вида
photo-увеличивающийся_номер-день_съемки-месяц_съемки-год_съемки.jpg
Причем дата съемки будет браться не из даты изменения файла (что тоже можно сделать), а из данных EXIF, записанных камерой.
- Чтобы у файлов не получилось двойное расширение, при его смене в поле «Применить к» нужно выбрать «Имя и расширение», а не просто «Имя». Если вы не меняете расширение, то оставьте этот параметр со значением по умолчанию (в этом случае шаблон переименования не будет применяться к расширениям файлов).
- Какие имена файлов получатся после переименования вы можете наблюдать сразу на центральной вкладке программы ещё до запуска процесса массового переименования.
- Чтобы приступить, достаточно нажать кнопку «Запустить» и подтвердить запуск переименования. Если нужно не просто переименовать, а скопировать или переместить файлы в другое расположение, в поле «Пакетный режим» вверху окна программы выберите соответствующий пункт.
- В результате получим группу файлов, переименованных по заданному нами шаблону.
Добавляемые методы (шаблоны переименования) сохраняются в программе, и вы можете выбирать нужный в нужное время. При нажатии правой кнопкой мыши по названию шаблона можно изменить его описание, например «Для фото», «Для архивов» и как угодно ещё. С шаблонов, которые не нужно использовать при текущем процессе переименования достаточно снять отметки.
Также при переименовании можно использовать не единственный шаблон, а сразу несколько (отмечаем соответствующие шаблоны, и они будут применяться в том порядке, в котором расположены в столбце «Методы переименования»): например, первый изменяет имя, второй — регистр в имени файлов, третий — удаляет «мусорные» символы из имени файла (для этого используем метод «Замена»).
Я привел лишь простой пример использования программы, но может она и многое другое: к примеру, вы можете сохранить файл шаблонов, а затем запускать переименование нужной группы файлов по нужному шаблону из командной строки, импортировать список файлов и новых имен из таблиц CSV, массово изменять атрибуты файлов, задавать случайные имена файлов, оптимизировать имена для использования в сети (или превратить кириллицу в транслитерацию), использовать информацию EXIF, данные тегов ID3, видео, GPS и не только.
Чтобы познакомиться с некоторыми готовыми шаблонами, можете нажать кнопку «Открыть» в методах переименования и посмотреть один из 4-х предопределенных в Advanced Renamer шаблонов и как именно они устроены.
Скачать Advanced Renamer можно с официального сайта https://www.advancedrenamer.com/. Примечание: в моем случае при загрузке архива с программой Защитник Windows 10 сообщил об угрозе в файле. Однако, VirusTotal сообщает, что он полностью чист.
Переименование группы файлов средствами Windows 10, 8.1 и Windows 7
Проводник Windows, командная строка и PowerShell могут быть использованы для массового переименования файлов и некоторые простые задачи вполне выполнимы с использованием этих средств (а если вы умеете писать скрипты PowerShell, спектр реализуемых задач становится заметно шире). Далее — примеры переименования в каждой из указанных системных утилит.
Переименование нескольких файлов в Проводнике Windows
Сначала о простом ручном переименовании в проводнике: вы можете выбрать файл, а затем выбрать в контекстном меню пункт «Переименовать». Еще быстрее будет нажать F2 после выделения файла. Не все знают, но, если после ввода нового имени файла нажать клавишу Tab, автоматически будет начато переименование следующего в папке файла.
Еще один вариант, подойдет мало для чего, но знать о нём имеет смысл: выбираем несколько файлов в папке в проводнике (мышью, либо удерживая Shift при выборе, либо удерживая Ctrl и нажимая мышью по отдельным файлам). После этого нажимаем F2 (или выбираем «Переименовать» в контекстном меню) и вводим имя для того файла, изменение имени которого начнется. Нажимаем Enter по окончании.
В результате все файлы будут иметь одинаковое имя, но после каждого имени в скобках будет указан номер по порядку, как на скриншоте.
Возможности переименования в командной строке
Командная строка также позволяет выполнять переименование группы файлов с помощью стандартной команды ren (для начинающих: Как запустить командную строку).
Примеры использования команды для переименования группы файлов, используя которые можно составить и свою команду:
ren *.jpg *.jpeg
В результате выполнения все файлы в текущей папке (на скриншоте выбрана командой cd путь_к_папке) с расширением .jpg приобретут расширение .jpeg. Значок «зведочка» в команде может заменять любой набор символов (как один символ, так и сразу несколько).
ren *.jpeg ?????.jpg
Указанная команда изменит расширение всех файлов в текущей папке с jpeg на jpg, а также сократит их имена до первых 5 символов. Вопросительный знак в команде означает любой один символ. Команда может выдать ошибку, если первые пять букв в имени двух и более файлов будут совпадать.
ren * file-*.old
Команда переименует все без исключения файлы в папке и приведет их к виду: file-старое_имя_файла.old (старое расширение при этом исчезнет).
Массовое переименование файлов в PowerShell
Еще один инструмент Windows, который может быть использован для массового переименования файлов и папок — Windows PowerShell. Самый быстрый способ его запуска — использовать поиск в меню пуск (панели задач) или, если у вас Windows 10 — нажать правой кнопкой мыши по кнопке Пуск и выбрать нужный пункт меню в контекстном меню (Другие способы: Как запустить Windows PowerShell).
В PowerShell есть команда Rename-Item для переименования файлов, которая при работе с единственным файлом может быть использована почти так же, как команда ren в командной строке, но благодаря возможности PowerShell использовать одни команды с другими, rename-item оказывается более функциональной. Несколько примеров:
Get-ChildItem -Path *.jpeg | Rename-Item -NewName {$_.name -replace ".jpeg",".jpg"}
В результате будут изменены все расширения файлов .jpeg на .jpg в текущей папке.
Get-ChildItem *.jpg | Rename-Item -NewName { $_.Name.Replace(' ','_') }
Команда выше заменит все пробелы в именах файлов .jpg в текущей папке на знаки нижнего подчеркивания.
Get-ChildItem | % { Rename-Item $_ "Секретный файл $_"}
К имени каждого файла в начале будет добавлено «Секретный файл» и пробел.
Get-ChildItem *.* | ForEach { Rename-Item -Path $_.FullName -NewName "$($_.DirectoryName)\$($_.BaseName)_$(Get-Date -F dd-MM-yyyy)$($_.Extension)" }
К имени каждого файла будет добавлено нижнее подчеркивание и дата в формате День-Месяц-Год.
Массовое переименование файлов в Total Commander
Многие пользователи используют Total Commander для работы с файлами на диске. Возможности группового переименования есть и в этой программе, реализовано это очень просто:
- Выделите нужные файлы (используйте Shift и стрелки клавиатуры, правым кликом мыши, Ctrl+выбор мышью).
- Нажмите Ctrl+M или выберите в меню «Файл» — «Групповое переименование файлов».
- Задайте параметры переименования в разделе «Маска для имени файла», используя предложенные маски, замены, изменение регистра, счетчик, а также опции из раздела «Плагины». Меняя опции, в окне предварительного просмотра вы сразу будете видеть, как именно будут называться уже переименованные файлы. Для изменения расширения используйте поле «Маска для расширения».
- В примере выше на скриншоте набор файлов будет переименован в Photo- с последующим добавлением счетчика из трех цифр и датой создания в формате ДД-ММ-ГГГГ (доступно в плагинах), расширение будет изменено на jpeg, а имя файла переведено в нижний регистр.
Сначала использование утилиты массового переименования в Total Commander может показаться сложным для кого-то, но, если слегка разберетесь, уверен, инструмент станет полезным и удобным.
Видео инструкция
В завершение видео о массовом переименовании файлов в Total Commander и Advanced Renamer, как самых эффективных способах.
Существуют и другие программы для рассмотренных целей (например, бесплатная Bulk Rename Utility), но, на мой взгляд, приведенных выше будет более чем достаточно почти для любых задач переименования.
The following article will teach how to rename multiple files in a folder with the bulk method using Command Line (CMD). Besides the CMD, we will show how you can do it using Powershell and VBS Script. Together with them, we will play using some tricks like how to trim multiple names or add a prefix to file names. Just in case if you want to do this for a single file check our previous article – “script rename file using Command Line”.
Bulk File Rename on Windows
Use Windows Explorer to rename files
Before we move to the commands ant batch, let’s see how we can rename multiple files at once in bulk using file explore.
You can simply use Windows Explorer to rename files If you don’t have a fancy renaming task at hand, or don’t want to install anything.
- Copy all the files which you want to rename, in a single folder.
- Highlight each file which you want to rename. Press Ctrl+A to highlight them all, if not, then press and hold Ctrl and click on each file you want to highlight.
- Once all the files are highlighted, right-click on the first file and click on “Rename” (press F2 to rename the file without making more actions).
Note! Arrange them properly if you want to provide any specific order. Do this task before renaming. The renaming process will start from the first selected file and end on the last with proper numbering sequence.
- Just enter the name which you would like to give and press enter. All the files will be given the same name with a numbering sequel in the end. It’s a pity that Windows is adding spaces, and ( ) characters in names, instead of having a simple _number option. Below we will teach how you can remove the space and other characters that you don’t want in the naming.
How to batch rename multiple files in bulk using CMD
- Open Start.
- Search for Command Prompt and click the result to open the app.
- Type the below command to navigate to the folder where are located the files you want to rename and press Enter:
cd c:\TestPath
- Type the following command to rename multiple files in bulk and press Enter:
rename *.FILE-EXTENSION ???-FILE-NAME.*
In the command, the wildcard ”*” tells the rename command to rename everything with a “.txt” extension. The “?” is also a wildcard, but it represents a character of the original file name.
This command example renames all “.txt” files in the target folder leaving the first three letters (which works as a unique identifier to avoid duplication) and appends “-Test1” to the name:
rename *.txt ???-Test1.*
How to create a simple batch script to rename all files in a folder
If you are going to automate the above activities or to execute over the network you will need to create a batch file. For example, you need to rename all files in a folder located on all computers of the network:
- Open a notepad file
- Copy the below command
@echo off rename “c:\*.txt” “???-Test1.*”
- Save as rename.bat
- Execute the file and all the changes will be done
Note! On this file, you can change the “rename “c:\*.txt” “???-Test1.*” command with the command you want, based on the task you want to archive described in this article.
You can use the batch files for many other simple actions like to delete files in bulk or to delete folders.
How to add a prefix to file names in batch
If you want to add any prefix to file names, it can be done as in the below example. Here we try to add ‘Work’ to every txt file in the current folder and subfolders.
forfiles /S /M *.txt /C "cmd /c rename @file Work@file"
Similarly, we can add a number to a file name.
forfiles /S /M *.txt /C "cmd /c rename @file 112@file"
How to Handling names with white spaces
If the new name you want to assign to the files has white space within it, it can be done by adding double quotes around the file name. So that forfiles does not misinterpret these double-quotes, you need to escape them with ‘\’
For example, to add ” – pic.txt” to each of the jpg files, the command would be as below.
forfiles /M *.txt /C "cmd /c rename @file \"@fname - pic.txt\""
How to create vbs script to rename multiple files in bulk
Consider a case like in the example image above where you have a folder of many images each named Copy of and then a word or two, like Copy of Black Tea.jpg.
Instead of manually renaming each file to delete “Copy of” or to change those words to something else, you could run a vbs script to do all the renaming for you. To create it follow the steps:
- Open a notepad file
- Copy the below command
Set objFso = CreateObject(“Scripting.FileSystemObject”) Set Folder = objFSO.GetFolder(“Path”) For Each File In Folder.Files sNewFile = File.Name sNewFile = Replace(sNewFile,”ORIGINAL”,”REPLACEMENT”) if (sNewFile<>File.Name) then File.Move(File.ParentFolder+”\”+sNewFile) end if Next
- Edit the file rename script to make it apply to your unique situation.
You need to change the text called “Path” to the folder name where your soon-to-be-renamed files are located. In our example c:\Test\
To make the script always apply to the folder it’s currently located in, just change the path to .\.
Also, change ORIGINAL to the characters you want to replace, and delete REPLACEMENT so that you can enter the text that should replace the original characters.
Note: Make sure you keep the quotes in every instance you see them. They need to remain in the folder path and the replace section.
- Save as rename.vbs
- Execute the VBS file to apply the script.
How to Trim Multiple Names
Here is how to trim multiple names simultaneously if you want to make the file names shorter.
For instance, you may have .txt files that you need to trim with names that have already been customized. Inside the target directory, you can add the “ren*.* ?????.*” function. This function will trim the original photos to the number of characters designated by the question marks.
This example will turn a file named “test1_test.txt” into “test1.txt” Of course, if the file name is six characters or less in length, it will remain the same. This is useful where short file names are a better option than long ones.
To make long file names shorter with Command Prompt, use these steps:
- Open Start.
- Search for Command Prompt and click the top result to open the app.
- Type the following command example to navigate to the folder with the files you want to rename and press Enter:
cd c:\TestPath
- Type the following command to make file names shorter and press Enter:
ren *.* CHARACTER-COUNT.*
In the command, the wildcard “*” matches all the file names and extensions in the folder, and the wildcard “?” indicates how many characters to use for the new file name.
This example trims the file names longer than five characters:
ren *.* ?????.*
If the file name is less than five characters, then the name will not change. (If you want to make the file name longer, add extra question marks.)
Once you complete these steps, you’ll end up with shorter file names depending on the question marks (?) you specified in the command.
How to Modify Multiple Names
If you want to rename a specific part of multiple filenames with similar names, here’s how to do it. For example to rename multiple filenames that all start with “Testing_2020” so that they start with “Test_20”
- Open Start.
- Search for Command Prompt and click the top result to open the app.
- Type the following command example to navigate to the folder with the files you want to rename and press Enter:
cd c:\TestPath
- Type the following command to make file names shorter and press Enter:
ren Testing_2020*.* Test_20*.*
This is a handy command for shortening file names.
How to Change Files with Specific Extensions
Now suppose that you have multiple file types within a folder and you want to rename only the ones with the .txt extension. This is very easy on command Prompt. Let us say that you want to rename all files titled “Testing_2020” to “Test_20,” but only those with the .txt extension. Then, type:
ren Testing_2020*.txt Test_20*.txt.
This command will rename all said filenames, like the one above, but it will only do so for .txt files.
How to Change Extensions of multiply files in bulk
Sometimes, you may want to change file extensions for multiple files. You could do this by using the above-mentioned function that allows you to change name parts, but there is an easier way to go about things here.
Once in the desired directory, type in “ren *.txt *.xml” to change all .txt files to .xml files. We have described this better in the following article here.
Powershell rename multiple files at once
- Open Start.
- Search for PowerShell and click the top result to open the app.
- Type the following command to rename a single file and press Enter:
Dir | Rename-Item –NewName { $_.name –replace “ “,”_” }
- The command replaces blank spaces with underscores (_).
This feature offers the most options, but using this method can by time-consuming, and complicated for beginners, which is why we assume that most users will skip this solution.
There you go, PowerShell is the most powerful tool for renaming multiple files in Windows 10. You can experiment with various options and commands, in case you have some free time, and want to learn more about this tool.
Other PowerShell commands:
To replace open bracket:
dir | rename-item -NewName {$_.name -replace [Regex]::Escape("("),""}
To replace close bracket:
dir | rename-item -NewName {$_.name -replace [Regex]::Escape(")"),""}
Conclusion:
So those are the trick to save your daily time and to rename multiple files in folder with the bulk methods. Using CMD, Powershell, or VBS Script. Let’s hope that you find and customize your needs.
На момент последней проверки у меня было более 500 000 файлов в папках «Документы» и «Фотографии». Поскольку я не собираюсь перебирать такое количество файлов и давать им новое имя по отдельности, я решил пакетно переименовать файлы Windows, чтобы сохранить рассудок.
1. Пакетное переименование с помощью PowerToys
PowerToys – это специализированное программное обеспечение Microsoft для опытных пользователей Windows. Среди его многочисленных функций есть PowerRename, более продвинутый и глубокий способ пакетного переименования файлов в Windows. Я загрузил ее из Microsoft Store, но она также доступна на GitHub.
Что мне нравится, так это то, что PowerRename автоматически интегрируется в контекстное меню правой кнопки мыши без необходимости делать что-либо еще. Теперь я могу выбрать все файлы, которые хочу пакетно переименовать, щелкнуть правой кнопкой мыши один из них и выбрать PowerRename. Конечно, в Windows 11 это скрывается под Показать дополнительные параметры.
Интересно: Как пользоваться командой Kill в Linux?
Быстрый совет: Если вы выбираете каждый файл в папке, нажмите Ctrl A, чтобы выбрать все. Если вы выбираете только некоторые файлы, удерживайте Ctrl при выборе каждого файла.
Выберите любые параметры, например конкретное слово или число, а затем выберите, чем заменить этот текст. Это очень целенаправленный способ пакетного переименования файлов.
Например, я заменяю слово Another в файлах на First. PowerRename выбирает только их и показывает предварительный просмотр конечного результата, прежде чем я что-то изменю. Если вас все устраивает, нажмите Применить.
Моя любимая функция – изменение форматирования текста. Легко переключаться между всеми строчными буквами, всеми заглавными буквами, заглавным регистром и выделением каждого слова заглавными буквами.
2. Простое переименование с помощью проводника
Если вам не нужно ничего сложного, используйте File Explorer для пакетного переименования файлов в Windows. Это быстро и просто.
Откройте папку с файлами, выделите все, что хотите изменить, и щелкните правой кнопкой мыши по первму файлу, который хотите переименовать (или нажмите F2). Введите новое имя файла, нажмите Enter, и все файлы получат одинаковые имена с последовательными номерами.
Этот метод лучше всего подходит для группировки файлов, например, серии файлов. Я изменил случайные имена на Важные заметки. Он также отлично подходит для фотографий, например, можно изменить стандартные имена в телефоне на что-то вроде Отпуск на пляже.
Хотя вы не можете изменить расширения файлов или то, как Windows добавляет номера, например, начиная с другого номера, есть несколько более продвинутых методов.
Если у вас возникли проблемы с File Explorer, узнайте, как исправить распространенные проблемы и перезапустить его.
3. Переименование расширений с помощью командной строки
Вам нужно пакетно переименовать расширения и файлы? Нажмите Win R, введите cmd
и нажмите OK, чтобы открыть Командную строку.
Измените каталог на папку, в которой находятся ваши файлы, введя полный путь или открыв папку в File Explorer. Щелкните правой кнопкой мыши местоположение пути над списком файлов и выберите Копировать адрес . Вы даже можете использовать Command Prompt для поиска файлов.
Введите cd
в командной строке и скопируйте адрес из File Explorer. Если у вас возникли проблемы с копированием и вставкой, возможно, вам нужно изменить настройки, чтобы включить функцию копирования и вставки в командной строке.
Введите следующую команду, используя нужные расширения файлов:
ren *.fileext1 *.fileext2
В моем случае я меняю расширение .jpg на .png. Обратите внимание, что при этом не меняется тип файла, а только расширение.
Если вы хотите пакетно переименовать имена файлов, процесс будет аналогичным. Однако если в именах файлов используется много символов, может возникнуть ошибка, связанная с дублированием файлов. Чтобы этого не произошло, используйте подстановочные знаки, которые представляют собой вопросительные знаки, чтобы сохранить уникальную часть исходного имени.
Сменив каталог командной строки на папку с файлами, введите следующее:
ren *.fileext ???name.fileext
Введите столько символов, сколько вам нужно. Если в имени файла нужен пробел, заключите имя файла в кавычки, например ?Имя файла.jpg. Если вы хотите, чтобы новое имя файла было в начале, используйте подстановочные знаки после имени файла, например FileName??. В моем случае я использую:
ren *.jpg ?????????January.jpg
Честно говоря, этот метод оказывается сложным. Если все файлы изначально не имеют одинаковой длины имени, то изменится только часть файлов.
4. Использование Windows PowerShell
Windows PowerShell – это что-то вроде Command Prompt на стероидах, хотя эти две программы в чем-то похожи. Для пакетного переименования файлов в Windows с помощью PowerShell вам понадобится всего несколько простых команд.
Щелкните правой кнопкой мыши папку с файлами и выберите Открыть в терминале. Терминал – это комбинированный инструмент Windows для PowerShell, Command Prompt и Azure Cloud Shell. По умолчанию он должен открываться в PowerShell.
Как только PowerShell будет открыт, используйте команду, приведенную ниже. При использовании команды не забудьте изменить TestName на желаемое имя файла и использовать правильное расширение файла.
dir | %{$x=0} {Rename-Item $_ -NewName "TestName$x.jpg"; $x++ }
Приведенная выше команда берет все файлы в каталоге и передает их команде Rename-Item
, которая переименовывает все файлы в TestName. Символ * обозначает числа, и эти числа присваиваются рекурсивно с помощью $x . Это позволяет каждому файлу иметь уникальное имя.
Если вы хотите изменить расширения всех файлов в каталоге, воспользуйтесь командой ниже.
Get-ChildItem *.jpg | Rename-Item -NewName { $_.Name -replace '.jpg','.png' }
Все, что имеет формат .jpg, меняется на .png одним нажатием кнопки.
Советую посмотреть документацию Microsoft для получения дополнительных параметров, которые можно использовать с этой командой.
5. Расширенное массовое переименование с помощью утилиты массового переименования
Да, встроенные инструменты работают удивительно хорошо для пакетного переименования файлов в Windows. Но если вам нужны еще более мощные функции, попробуйте воспользоваться утилитой Bulk Rename Utility. Этот бесплатный инструмент от сторонних разработчиков превосходит все ожидания. Она не для слабонервных, но я знаю, что вы полюбите ее, когда попробуете.
Добавляйте/удаляйте символы, добавляйте текст, добавляйте даты, изменяйте расширения, используйте свойства Windows, используйте метаданные EXIF и многое другое. Я даже могу использовать список CSV для пакетного переименования. Просто введите параметры (не обязательно использовать все поля), просмотрите и переименуйте. Для изменений, которые я делаю регулярно, я сохраняю параметры, чтобы использовать их позже.
Я также пробовал FileRenamer и Advanced Renamer, но этот вариант, как правило, самый сложный.
Вы тут: Главная → Windows → Как массово переименовать файлы по маске в PowerShell
Невинный пост в группе ВК о сочетании клавиш проводника Ctrl + Shift + N внезапно зацепил приверженцев альтернативных файловых менеджеров. По ходу дела всплыла тема массового переименования файлов.
Евгений Генеральчик подметил, что в отличие от Total Commander, проводнику не по зубам переименование 20 тысяч файлов, например, добавление к имени файла текущей даты. Действительно, в классической серии пенальти я сам признал незаменимым сочетание Ctrl + M в TC, сфокусировавшись на функции поиска/замены.
Однако, отвечая Евгению в ВК, я заметил, что его задачу переименования решу в PowerShell и даже ванлайнером. Написал и подумал – надо все-таки решить, а то вдруг попросят пруфов
Переименование файлов методом «поиск / замена»
Через несколько минут у меня получился такой вариант:
Get-ChildItem -Path $env:userprofile\Downloads -Filter "*.zip*" -Recurse |` Rename-Item -NewName {$_.Name -Replace "\.zip$", "-$(Get-Date -Format {yyyy-MM-dd}).zip"} -WhatIf
На самом деле в команде одна строка, а на две я ее разбил, чтобы она лучше читалась. Давайте разберем составляющие команды.
Выборка файлов
Для получения списка файлов я использую командлет Get-ChildItem. Он же gci, он же ls, он же Элла Кацнельбоген dir, а эта команда прекрасно знакома всем, кто написал хоть один батник.
- -Path $env:userprofile\Downloads – файлы ищутся по заданному пути, т.е. в папке Downloads в профиле пользователя
- -Filter «*.zip» – фильтруются только файлы с расширением ZIP. Впрочем, в выборку попадут также и файлы, содержащие в имени «.zip», но этим я пренебрегу. В принципе, можно не указывать параметр, а просто написать .zip.
- -Recurse – поиск ведется рекурсивно, т.е. во всех вложенных папках. Кстати, в PowerShell 5.0, т.е. в Windows 10, у gci появился новый параметр -Depth, задающий глубину рекурсии. Например, 0 – только текущая папка, 2 – на два уровня вглубь.
Выбранные файлы по конвейеру передаются дальше для переименования.
Переименование файлов
Командлет Rename-Item тоже обладает хорошо известным псевдонимом ren. С помощью параметра -NewName задается новое имя, а в фигурных скобках стоит выражение, задающее условия переименования
- $_.Name – для каждого переданного по конвейеру файла $_ изменяется полное имя .Name
- -Replace «\.zip$», «-дата.zip» – я слегка упростил конструкцию, написав дату словом, чтобы был понятен смысл аргументов оператора -Replace: ‘что ищем’, ‘на что меняем’. Здесь тонкость в том, что у -Replace первый аргумент — регулярное выражение, а не просто поиск текста. В регулярных выражениях точка означает любой символ, поэтому использование «.zip» чревато нежелательным переименованием, например, файла winzip-setup.exe.
- «-$(Get-Date -Format {yyyy-MM-dd}).zip» – подставляем мы все-таки текущую дату в формате 2015-09-04. Формат дат я уже разбирал, а здесь хочу обратить ваше внимание на другой фокус. Выражение (в данном случае – командлет) не получится вставить просто так в аргумент оператора, но его можно поместить между круглыми скобками такой конструкции $().
- -WhatIf – этот стандартный параметр в переводе означает «что будет, если». Когда он добавлен в команду, ее реального выполнения не происходит, а в консоль выводится результат того, что могло бы произойти без этого параметра. Другими словами, вы можете проверить команду у себя, не опасаясь, что все архивы переименуются
Переименование файлов путем добавления счетчика
По ходу обсуждения в ВК выяснилось, что пример с датой надуманный, а более реальной выглядит последовательная нумерация файлов. Действительно, в TC я часто использовал очень удобный счетчик [C] для переименования графических файлов.
В PowerShell его тоже можно реализовать. Допустим, надо добавить счетчик из трех цифр в конце имени всех файлов JPG в текущей папке. Команда может быть такой:
dir *.jpg | % {$i=1} {ren $_ -NewName ("$($_.Basename)-{0:00#}.jpg" -f $i++) -WhatIf}
С выборкой все понятно, поэтому давайте разберем переименование.
- % — псевдоним командлета Foreach-Object, который перебирает по одному все переданные по конвейеру объекты. За ним следуют два блока скриптов в фигурных скобках { }, о которых чуть ниже.
- {$i=1} – первый блок, в котором переменная i получает значение 1. Это нужно для счетчика, который после переименования каждого объекта будет увеличиваться на единицу с помощью $i++.
- ren $_ — начало второго блока для переименования каждого полученного по конвейеру объекта.
- «$($_.Basename)-{0:0#}.png» – новое имя файла. Конструкцию $() я разбирал выше, но здесь я использую свойство Basename, т.е. имя файла без расширения (Name – имя файла с расширением).
{0:00#} – счетчик, причем в данном случае он трехзначный, что определяется конструкцией из трех символов 00# после двоеточия. Эквивалентом будет {0:D3}, где число после D задает количество символов счетчика.
Примечание о блоках скриптов
Существует три типа блоков:
- Begin (начало) — выполняется один раз в самом начале, до перебора элементов
- Process (обработка) — выполняется для каждого элемента
- End (конец) — выполняется в самом конце перебора
Командлет Foreach-Object обрабатывает блоки особым образом. Если ему указать только один блок, он воспринимает его как Process. Если два, то первый будет Begin, а второй — Process (наш случай). Если все три, то поведение стандартное: Begin → Process → End.
Дискуссия
Я не ставил перед собой задачу описать на языке PowerShell эквиваленты всех функций массового переименования Total Commander. Думаю, что это вполне возможно, а степень успеха зависит лишь от вашего уровня владения PowerShell, .NET и гуглояндексом. Вопрос лишь в том, насколько это целесообразно.
Графический интерфейс TC понятнее, нагляднее и не требует специальной подготовки. Однако бывают ситуации, когда вы не сможете воспользоваться любимым инструментом. Например, его нет в системе, а установить нельзя, поскольку ПК изолирован от внешней среды или это запрещено политикой организации. Если вы не ленитесь расширять свой кругозор и не упускаете случая поковырять PowerShell, вы с честью выйдете из такой ситуации.
Кстати, в ближайших записях я познакомлю вас с некоторыми новыми возможностями платформы PowerShell 5.0, включенной в Windows 10.
Расскажите в комментариях, какую задачу вы в последний раз решали:
- с помощью PowerShell или другого скриптового языка
- средства для массового переименования в любимом файловом менеджере
Я благодарю Василия Гусева за ценные дополнения, которые я добавил в статью после публикации.
Наведите порядок в файловой системе с помощью этих встроенных инструментов или специального ПО.
Чтобы быстро находить файлы и бегло ориентироваться в них, недостаточно разложить всё по правильным папкам. Не менее важно присвоить файлам легко читаемые и осмысленные имена. Возиться с каждым из них по отдельности — контрпродуктивно. Поэтому существуют способы группового переименования.
Для работы с группой файлов лучше скопировать их в отдельную папку. Это существенно упростит процесс.
С помощью штатных средств Windows
Изменяем имена файлов
Рассмотрим самый простой случай: у нас есть n‑ое количество изображений с ни о чём не говорящими названиями.
Приведём имена этих файлов к наглядному виду Picture (n), где Picture будет названием, а n — порядковым номером. Это можно легко сделать прямо в «Проводнике».
Выделяем все картинки, которые хотим переименовать. Чтобы сделать это быстро, используем комбинацию клавиш Ctrl + A. Затем просто жмём F2 или кликаем правой кнопкой мыши на первом файле и выбираем «Переименовать». В качестве имени для выделенного изображения вводим слово Picture и нажимаем Enter.
Windows автоматически присвоит такое же имя всем последующим файлам и расставит все порядковые номера.
При необходимости вы можете отменить массовое переименование комбинацией клавиш Ctrl + Z.
Если захотите переименовать группу папок в «Проводнике», то это можно сделать точно так же.
Изменяем расширения файлов
Допустим, у нас есть несколько текстовых документов, которые после двойного клика открываются блокнотом. Но нам нужно, чтобы по умолчанию они открывались браузером. Для этого придётся изменить их расширение с .txt на .html. Операции такого рода можно быстро выполнять с помощью командной строки.
Нажимаем клавиши Windows + R, вводим в появившемся поле cmd и кликаем ОК — видим окно командной строки. Теперь вставляем в него путь к папке, в которой лежат наши файлы, сразу после команды cd: cd C:\Users\Max Volotsky\Desktop\Docs
, и жмём Enter. Затем используем специальную команду, которая изменит их расширения: rename *.txt *.html
, и снова нажимаем Enter.
Первым в команде указывается исходное расширение, вторым — новое. После ввода команды система мгновенно вносит изменения.
Чтобы вернуть всё как было, нужно повторно воспользоваться командой rename, поменяв местами расширения.
С помощью сторонних утилит
Никакие встроенные инструменты не сравнятся по функциональности со специальными программами, разработанными специально для пакетного переименования. В Сети можно найти множество таких бесплатных утилит, достаточно ввести в поиске bulk file rename.
Мы рассмотрим переименование на примере программы Bulk Rename Utility. С её помощью очень удобно изменять имена папок и файлов, а также расширения последних.
При первом запуске может показаться, что интерфейс утилиты пришёл прямо из ада и, возможно, в этом есть доля правды. Зато пользователю не нужно переходить по многочисленным вкладкам и меню: он получает доступ ко всем функциям из одного окна.
Итак, допустим, у нас есть группа аудиофайлов, которые хочется привести к приятному для глаза виду. В данном случае раздражают цифры и отсутствие названия исполнителя.
Запускаем приложение и через встроенный файловый менеджер переходим в нужную нам папку. Далее, уже знакомым сочетанием клавиш Ctrl + A выделяем все файлы. Нам нужно удалить первые 3 символа в начале имени каждого файла и дописать название исполнителя в самом начале. Для этого указываем необходимые параметры на панелях Remove и Add, после чего жмём Rename.
Теперь сделаем так, чтобы все расширения состояли из символов в нижнем регистре: на панели Extension выбираем вариант Lower и нажимаем Rename.
Как видите, в окне программы доступны и другие панели. К примеру, Numbering позволяет нумеровать документы различными способами, а с помощью Case можно менять регистр символов в именах файлов. Благодаря столбцу New Name во встроенном проводнике, который показывает результат переименования ещё до его применения, вы легко разберётесь в остальных инструментах Bulk Rename Utility.
Последнюю операцию с файлами и папками, выполненную в программе, можно легко отменить комбинаций клавиш Ctrl + Z.