Скрипт для получения изображений в папке с размерами a.txt файл

как название идет, есть сценарий для Win 7, чтобы напечатать на .txt-файл все изображения (JPG, PNG, GIF ecc) внутри папки вместе с "именем файла" и "размером пикселей"?


Я пробовал с dir в командной строке, но только перечисляет имя, размер файла ecc..


решение с ExifTool

лучшее дело ИМО, причем команда уже закодирована в имени файла .exe его полностью перетащить сценарий, чтобы использовать везде, где вы хочу!

обновление


Для удобства я немного изменил имя встроенного файла exe на this

ExifTool(-FileName -Imagesize -r -T -w+! %0finfo.txt -ext jpg --ext exe .).exe

таким образом, я сократил до минимума .txt вывод в одну строку на изображение (-T) и добавлена опция рекурсивного (-r) Так что он может обрабатывать вложенные папки.


решение с ImageMagick

Я разместил ниже моего решения с ImageMagick, довольно быстро и просто, но ofc требует установки библиотеки.

26
задан Gruber
19.02.2023 12:41 Количество просмотров материала 2395
Распечатать страницу

3 ответа

используя ExifTool (переносимый исполняемый файл переименован в exiftool.exe):

exiftool -ImageSize -r .

здесь ImageSize это имя тега, которое вас интересует, и будет печатать ширина изображения X высота изображения. The -r switch позволяет рекурсивно обрабатывать файлы в подкаталогах.

Custom выходной формат строки тоже просто. Например:

exiftool -p "Image Name: \"$FileName\"$/Image Size: $ImageSize$/" -r .

в этом случае имена тегов перед ним $. $/ печатает символ новой строки.

Примечание: перечисленные команды должны быть набраны в командной строке. Для перенаправления вывода в текстовый файл можно добавить > Details.txt к ним.


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

ExifTool(-FileName -Imagesize -w+! %0fDetails.txt -ext gif --ext exe .).exe

это запишет все выходные данные консоли (-w) в файл с именем подробности.txt в текущем каталоге. В этом случае выходные данные будут состоять из имен и размеров изображений для всех GIF в текущем каталоге. Более подробная информация о -w параметр, включая значение +,! и %0f доступны по ссылке выше документации.

вы можете include дополнительные расширения для обработки с помощью -ext jpg -ext png и так далее, или удалить -ext gif вообще для чтения всех поддерживаемых типов файлов (включая не-изображения которые вы не можете хотеть).

--ext exe используется исключить все EXEs (чтобы собственный исполняемый файл программы не включался в отчет).

-r можно, конечно, добавить, чтобы включить рекурсивную обработку.

здесь lots больше вы можете сделать с программой, учитывая, насколько она смехотворно мощная (и расширяемая, учитывая, что полный источник Perl находится в свободном доступе)!

6
отвечен Karan 2023-02-20 20:29

Ok решение с утилиты, просто и быстро (но ofc требует библиотеки).

Откройте командную строку в интересующей вас папке (Shift+Правой Кнопкой Мыши внутри окна папки и выберите "Открыть командное окно здесь"), а затем в командной строке используйте это

identify -format "%f %wx%h\r" *.jpg > info.txt

требует %f filename,%w width и %h height формат "Ширинахвысота"

подробнее здесь http://www.imagemagick.org/script/escape.php

1
отвечен Gruber 2023-02-20 22:46

здесь скрипт PowerShell ниже, что должно сделать это; просто измените каталоги для списка и вывода. Я тестировал под Windows 8.1 и Windows PowerShellISE.

param( $folder = "E:\My Pictures", $outputFile = "E:\details.txt" )
$objShell = New-Object -ComObject Shell.Application
$fileList = @()
$attrList = @{}
$details = ( "Dimensions" )
$objFolder = $objShell.namespace($folder)
for ($attr = 0 ; $attr  -le 500; $attr++)
{
    $attrName = $objFolder.getDetailsOf($objFolder.items, $attr)
    if ( $attrName -and ( -not $attrList.Contains($attrName) ))
    {
        $attrList.add( $attrName, $attr )
    }
}
dir $folder -Recurse -Directory | ForEach-Object{
    $objFolder = $objShell.namespace($_.FullName)
    foreach($file in $objFolder.items())
    {
        foreach( $attr in $details)
        {
            $attrValue = $objFolder.getDetailsOf($file, $attrList[$attr])
            if ( $attrValue )
            {
                Add-Member -InputObject $file -MemberType NoteProperty -Name $("A_" + $attr) -value $attrValue
            }
        }
        $fileList += $file
        $fileList.Count
    }
}
$fileList | Export-Csv $outputFile -Delimiter ','
$fileList | Format-Table
1
отвечен DrMoishe Pippik 2023-02-21 01:03

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх