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

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

Как следует из заголовка, есть ли скрипт для Win 7, чтобы распечатать в файле .txt все изображения (JPG, PNG, GIF и т.д.) внутри папки вместе с "именем файла" и "размером в пикселях"?
Я пробовал с dirпомощью командной строки, но выводит только имя, размер файла и т.д.


Решение с ExifTool

На мой взгляд, это лучшее предложение, поскольку команда уже закодирована в имени файла .exe, и его можно просто перетаскивать и использовать где угодно!

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

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

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


Решение с ImageMagick

Ниже я разместил свое решение с помощью ImageMagick, оно довольно быстрое и простое, но, конечно, требует установки библиотеки.

решение1

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

exiftool -ImageSize -r .

ЗдесьРазмер изображенияэто имя тега, которое вас интересует и будет напечатаноШирина изображения x Высота изображения. -rПереключатель позволяет рекурсивно обрабатывать файлы в подкаталогах.

ОбычайФормат выходной строкитоже просто. Например:

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доступна по ссылке на документацию выше.

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

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

-rКонечно, можно добавить возможность рекурсивной обработки.

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

решение2

Хорошо, решение сImageMagick, просто и быстро (но, конечно, требует библиотеки).

Откройте командную строку в интересующей вас папке ( Shift+ RightClickвнутри окна вашей папки и выберите «Открыть командное окно здесь»), затем в командной строке введите следующее:

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

Вызывает %f filenameи форматируется %w widthкак %h height"ШИРИНАxВЫСОТА"

Более подробная информация здесьhttp://www.imagemagick.org/script/escape.php

решение3

Там есть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

Связанный контент