Я хочу пакетно переименовать файлы в папке, добавив префикс имени папки к новым именам. т.е. все файлы C:\house chores\
будут переименованы house chores - $old_name
.
источник
Я хочу пакетно переименовать файлы в папке, добавив префикс имени папки к новым именам. т.е. все файлы C:\house chores\
будут переименованы house chores - $old_name
.
Вариант 1. Использование Windows PowerShell
Откройте меню Windows. Введите: «PowerShell» и откройте командное окно Windows PowerShell.
Перейти к папке с желаемыми файлами: например, cd "C: \ house chores" Примечание: адрес должен включать кавычки "", если есть пробелы.
Вы можете использовать «dir», чтобы увидеть все файлы в папке. Используя '|' будет конвейерно выводить 'dir' для следующей команды.
Примечания: «dir» - это псевдоним Get-ChildItem. См. Вики: командлеты . Можно предоставить дополнительную функциональность. например, 'dir -recurse' выводит все файлы, папки и подпапки.
Что, если мне нужен только диапазон файлов?
Вместо dir | Я могу использовать:
dir | where-object -filterscript {($_.Name -ge 'DSC_20') -and ($_.Name -le 'DSC_31')} |
Для пакетного переименования с именем каталога в качестве префикса:
dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}
Вариант 2: использование командной строки
В папке нажмите Shift + щелкните правой кнопкой мыши: выберите «открыть командное окно здесь»
for %a in (*.*) do ren "%a" "prefix - %a"
Если файлов много, было бы неплохо добавить перед этим команду «@echo off» и команду «echo on» в конце.
@
in@echo on
не требуется. Вы только что обратились@echo off
.do
) не работает - после того, как некоторые файлы были переименованы,for
находит их под новым именем, снова и снова добавляя префикс, пока не будет достигнут предел длины имени файла.ren was unexpected at this time.
почему?do
его ответе отсутствует слово . так и должно бытьfor %a in (.) do ren "%a" "prefix - %a"
Проблема с двумя ответами Powershell здесь заключается в том, что префикс может в конечном итоге дублироваться, поскольку сценарий потенциально будет запускать файл как до, так и после его переименования, в зависимости от каталога, который обрабатывается при выполнении процесса переименования. Чтобы обойти это, просто используйте
-Exclude
опцию:Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }
Это предотвратит переименование любого файла более одного раза.
источник
Бесплатное программное обеспечение « Утилита массового переименования » также хорошо работает (а также мощно для сложных задач). Скачивание и установка занимает минуту.
Смотрите скриншоты и руководство на исходном сайте.
-
Я не могу предоставить пошаговые снимки экрана, поскольку изображения должны быть выпущены под лицензией Creative Commons License , и я не владею снимками экрана программного обеспечения.
Отказ от ответственности: я никоим образом не связан с указанным программным обеспечением / компанией. Мне понравился продукт для моей собственной задачи, он отвечает требованиям OP и аналогичным требованиям, поэтому рекомендую.
источник
Это сработало для меня, сначала cd в каталоге, в котором вы хотите изменить имена файлов, а затем выполните следующую команду:
Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }
источник
Я рвал волосы, потому что для некоторых элементов переименованный элемент снова переименовывался (неоднократно, если не достигалась максимальная длина имени файла). Это происходило как для Get-ChildItem, так и для передачи вывода dir. Я предполагаю, что переименованные файлы были подобраны из-за изменения в алфавитном порядке. Я решил эту проблему следующим образом:
Get-ChildItem -Path . -OutVariable dirs foreach ($i in $dirs) { Rename-Item $i.name ("<MY_PREFIX>"+$i.name) }
Это «блокирует» результаты, возвращаемые Get-ChildItem, в переменной $ dirs, и вы можете перебирать их, не опасаясь, что порядок будет изменен или произойдут другие забавные дела.
Совет Dave.Gugg по использованию -Exclude также должен решить эту проблему, но это другой подход; возможно, если переименовываемые файлы уже содержат шаблон, использованный в префиксе.
(Отказ от ответственности: я очень люблю PowerShell n00b.)
источник
На основе ответа @ ofer.sheffer эта команда массово переименует и добавит текущую дату к имени файла. т.е. "file.txt" становится "20180329 - file.txt" для всех файлов в текущей папке
for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"
источник
Основываясь на ответе @ ofer.sheffer, это вариант CMD для добавления аффикса (это не вопрос, но эта страница по-прежнему является результатом Google №1 при поиске аффикса). Это немного другое из-за расширения.
for %a in (*.*) do ren "%~a" "%~na-affix%~xa"
Вы можете изменить часть "-affix".
источник
Я знаю, что это старый вопрос, но я многому научился из различных ответов, но в качестве функции придумал свое собственное решение. Это должно динамически добавлять родительскую папку в качестве префикса ко всем файлам, которые соответствуют определенному шаблону, но только если у нее еще нет этого префикса.
function Add-DirectoryPrefix($pattern) { # To debug, replace the Rename-Item with Select-Object Get-ChildItem -Path .\* -Filter $pattern -Recurse | Where-Object {$_.Name -notlike ($_.Directory.Name + '*')} | Rename-Item -NewName {$_.Directory.Name + '-' + $_.Name} # Select-Object -Property Directory,Name,@{Name = 'NewName'; Expression= {$_.Directory.Name + '-' + $_.Name}} }
https://gist.github.com/kmpm/4f94e46e569ae0a4e688581231fa9e00
источник