Сложное переименование файлов
1175 сообщений
#6 лет назад
Подскажите, как можно решить такую задачу.Имеется 400 файлов (изображения), заказчик хочет чтобы в имени файла был указан размер файла в пикселях.
Образец: имя_файла 700 х 500.jpg
Реально ли решить эту проблему, чтобы не сойти с ума от переименования каждого файла вручную?
Убедить человека не получается, что в ОС в режиме таблицы можно включить отображать размер файла.
236 сообщений
#6 лет назад
В Irfanview инструментом группового переименовывания по шаблону $N $W x $HПодробнее:
1) ставите IV
2) открываете в ней любое изображение из папки
3) нажимаете клавишу T
4) выделяете все изображения
5) нажимаете клавишу B
6) выбираете опцию "пакетное переименовывание"
7) заходите в опции шаблона имени
8) нажимаете кнопку справки, выбираете нужные вам теги, составляете из них шаблон имени
Дальше разобраться не сложно)
953 сообщения
#6 лет назад
А размер всех изображений разный? если одинаковый или группы одинаковые, то в тотал коммандере есть инструмент для множественного переименования. Если все разные то можно например на php решить это.
11416 сообщений
#6 лет назад
На PHP пишется скрипт в несколько строчек буквально.
1175 сообщений
1175 сообщений
1175 сообщений
#6 лет назад
ОС Win 8Предложенный вариант с php не подходит. я всего лишь дизайнер.
Infanview частично помогает, но полностью воспроизвести структуру не получается.
Каждую папку приходится открывать и переименовывать пакетно все что в папке и так n - раз
В принципе уже легче, возможно сказывается что все файлы называются одинаково (фактически 30 папок в которых файлы названы 1,2 .... 11)
236 сообщений
#6 лет назад
Вы, как дизайнер, должны знать, что волшебной кнопки не существует.А вообще, 400 файлов в 30-ти папках с помощью инструментов TС и IV переименовываются за 10 минут максимум
206 сообщений
#6 лет назад
Набросал такой скрипт на powershell. Проверял на Windows 10. Запускать powershell с правами администратора. Команда на запуск скрипта должна отключать политику безопасности, например, так: powershell -ExecutionPolicy ByPass -File "C:\Path\To\Script\image-renamer.ps1".
Кодировка файла - ANSI, переводы строк - Windows (Это удобно смотреть в Notepad++, в UTF-8 у меня не заработало). В теле скрипта укажите свои пути к изображениям.
Скрипт читает рекурсивно изображения из исходной директории, дублирует все папки в целевой директории, копирует туда исходное изображение, смотрит его размеры, переименовывает.
Я не спец в powershell, наверно, можно было сделать более оптимально.
::LoadWithPartialName("System.Windows.Forms")
#Задаем исходную директорию
$source = 'C:\Users\i\OneDrive\Pictures\Screenshots'
#Сюда класть переименованные копии
$target = 'C:\Users\i\OneDrive\Pictures\test'
#Перебираем все файлы с указанными расширениями в исходной директории
foreach ($file in dir $source -r -inc *.jpg, *.gif, *.png) {
try {
#Получаем объект изображения
$image = new-object System.Drawing.Bitmap $file.FullName
#Готовимся с копированию дерева папок
#Получаем путь к целевой директории заменой строки из $source на строку $target
$targetdir = $file.DirectoryName.Replace($source,$target)
#Создаем целевую директорию, если она не существует
if (!(test-path $targetdir)) {
md $targetdir
}
#Копируем в нее исходный файл
copy $file $targetdir
#Готовимся к переименованию нового файла
#Формируем строку с полным путем к скопированному файлу
$newPath = "{0}\{1}" -f $targetdir, $file.Name
#Формируем строку с новым названием файла (имя_без_расширения, ширина изображения, высота)
$newName = "{0} {1}x{2}{3}" -f $file.BaseName, $image.Width, $image.Height, $file.Extension
#переименовываем
Rename-Item -Path $newPath -NewName $newName
} catch {
Write-Host $file " **IS NOT COPIED**"
}
}