Переименуйте несколько файлов в папке, добавьте префикс (Windows)

Я хотел бы пакетно переименовать файлы в папке, префикс имени папки в новые имена. т. е. файлы C:house chores будут переименованы house chores - $old_name.

6 ответов


Вариант 1: Использование Windows PowerShell

Откройте меню windows. Введите "PowerShell" и откройте командное окно "Windows PowerShell".

папка Goto с нужными файлами: например, cd "C:\house работа по дому" Примечание: адрес должен включать кавычки"", если есть пробелы.

вы можете использовать "dir", чтобы увидеть все файлы в папке. Используя '|' производство будет выход 'реж' для команды, которая следует.

Примечание: 'реж' является псевдоним "Get-ChildItem". См.: wiki: командлеты. Можно обеспечить дальнейшую функциональность. например, "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 " в конце.


проблема с двумя ответами Powershell здесь заключается в том, что префикс может в конечном итоге дублироваться, так как сценарий потенциально будет работать над файлом как до, так и после его переименования, в зависимости от каталога, который используется при запуске процесса переименования. Чтобы обойти это, просто используйте :

Get-ChildItem -Exclude house chores-* | rename-item -NewName { "house chores-" + $_.Name }

это предотвратит процесс переименования любого файла более одного раза.


Бесплатное Программное Обеспечение 'Утилита Массового Переименования тоже хорошо работает (и является мощным перспективных задач). скачать и установка занимает минуту.

посмотреть скриншоты и учебник на оригинальном веб-сайте.

--

Я не могу предоставить пошаговые скриншоты, поскольку изображения должны быть выпущены под Лицензия Creative Commons, а не скриншоты программное обеспечение.

отказ от ответственности: я никоим образом не связан с указанным программным обеспечением/компанией. Мне понравился продукт для моей собственной задачи, он обслуживает OP и аналогичные требования, тем самым рекомендуя.


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

Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }

на основе @ofer.sheffer ответ эта команда будет массовое переименование и добавить текущую дату к имени файла. ie " файл.txt "становится" 20180329-файлом.тхт" для всех файлов в текущей папке

for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"

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

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