Как следует из заголовка, есть ли скрипт для 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