Станислав Б.
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 сообщений
#6 лет назад

размер разный, для директа баннеры.


есть более подробное руководство к этой программе?
Иван О.
236 сообщений
#6 лет назад
greyheart, см сообщение выше
Станислав Б.
1175 сообщений
#6 лет назад
 

спасибо, попробую!
Станислав Б.
1175 сообщений
#6 лет назад


вроде получается, только не могу понять как в выходной папке сохранить директории с точно таким же названием.

Если понятнее. рабочая папка name - в ней 5 папок - в 5 папках по 6 в каждой, а в них файлы (как в сказке про Кощея).
вот на выходе мне тоже такая структура нужна
Сидоров В.
918 сообщений
#6 лет назад
Цитата:
вот на выходе мне тоже такая структура нужна


Иван О.
236 сообщений
#6 лет назад
greyheart, знания операций с папками и смекалка в помощь)
Дмитрий Ш.
357 сообщений
#6 лет назад
Какая ос? В Linux не так трудно баш скрипт накатать.
Станислав Б.
1175 сообщений
#6 лет назад
ОС Win 8

Предложенный вариант с php не подходит. я всего лишь дизайнер.
Infanview частично помогает, но полностью воспроизвести структуру не получается.
Каждую папку приходится открывать и переименовывать пакетно все что в папке и так n - раз

В принципе уже легче, возможно сказывается что все файлы называются одинаково (фактически 30 папок в которых файлы названы 1,2 .... 11)
Иван О.
236 сообщений
#6 лет назад
Вы, как дизайнер, должны знать, что волшебной кнопки не существует.

А вообще, 400 файлов в 30-ти папках с помощью инструментов TС и IV переименовываются за 10 минут максимум
Павел Л.
116 сообщений
#6 лет назад
Total Commander
Files->Multi-Rename Tool
Приложения:
  • 35 КБ
Владимир О.
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**"
    }
}
Станислав Б.
1175 сообщений
#6 лет назад
Большое спасибо всем откликнувшимся!
Задачу решил)