Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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".