Я хотел бы пакетно переименовать файлы в папке, добавив имя папки в новые имена. т.е. файлы в C:\house chores\
будут переименованы в house chores - $old_name
.
Переименуйте несколько файлов в папке, добавьте префикс (Windows)
Ответ 1
Вариант 1: Использование Windows PowerShell
Откройте меню окон. Введите: "PowerShell" и откройте окно командной строки Windows PowerShell.
Откройте папку с нужными файлами: например. cd "C:\house chores" Примечание: адрес должен содержать кавычки "", если есть пробелы.
Вы можете использовать 'dir' для просмотра всех файлов в папке. Используя '|' будет конвейерный вывод "dir" для следующей команды.
Примечания: 'dir' является псевдонимом 'Get-ChildItem'. Смотрите: wiki: cmdlets. Можно обеспечить дополнительную функциональность. например '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 + right-click: выберите "открыть командное окно здесь"
for %a in (*.*) do ren "%a" "prefix - %a"
Если есть много файлов, возможно, было бы неплохо добавить команду "@echo off" перед этим и команду "echo on" в конце.
Ответ 2
Проблема с двумя ответами Powershell здесь заключается в том, что префикс может в конечном итоге дублироваться, поскольку сценарий потенциально может выполняться над файлом как до, так и после того, как он был переименован, в зависимости от того, какой каталог восстанавливается при выполнении процесса переименования. Чтобы обойти это, просто используйте -Exclude
:
Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }
Это не позволит процессу переименовать какой-либо один файл более одного раза.
Ответ 3
Бесплатное программное обеспечение Bulk Rename Utility 'также хорошо работает (и также мощно для расширенных задач). Download, и установка занимает минуту.
См. screenshots и tutorial на оригинальный веб-сайт.
-
Я не могу предоставить пошаговые скриншоты, поскольку изображения должны быть выпущены под Creative Commons License, и я не являюсь владельцем скриншоты программного обеспечения.
Отказ от ответственности: я никак не связан с указанным программным обеспечением/компанией. Мне понравился продукт для моей собственной задачи, он обслуживает OP и аналогичные требования, рекомендуя таким образом.
Ответ 4
Это сработало для меня, сначала cd в каталоге, в который вы хотите изменить имена файлов, и затем выполните следующую команду:
Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }
Ответ 5
Основываясь на ответе @ofer.sheffer, эта команда будет переименовываться и добавлять текущую дату к имени файла. то есть "file.txt" становится "20180329 - file.txt" для всех файлов в текущей папке
for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"
Ответ 6
Я рвал на себе волосы, потому что для некоторых элементов переименованный элемент снова переименовывался (неоднократно, если не была достигнута максимальная длина имени файла). Это происходило как для 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.)
Ответ 7
Я знаю, что это старый вопрос, но я многому научился на разных ответах, но в качестве функции предложил собственное решение. Это должно динамически добавлять родительскую папку в качестве префикса ко всем файлам, которые соответствуют определенному шаблону, но только если у него еще нет этого префикса.
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
Ответ 8
Основываясь на ответе @ofer.sheffer, это вариант CMD для добавления аффикса (это не вопрос, но эта страница по-прежнему является результатом Google № 1, если вы ищете аффикс). Это немного отличается из-за расширения.
for %a in (*.*) do ren "%~a" "%~na-affix%~xa"
Вы можете изменить часть "-affix".