สคริปต์เพื่อรับรูปภาพในโฟลเดอร์ที่มีขนาดที่พิมพ์เป็นไฟล์. txt


5

ในฐานะที่เป็นชื่อไปมีสคริปต์สำหรับ Win 7 ที่จะพิมพ์บนไฟล์. txt ภาพทั้งหมด (JPG, PNG, GIF ecc) ภายในโฟลเดอร์พร้อมกับ "ชื่อไฟล์" และ "ขนาดพิกเซล" หรือไม่?
ฉันได้ลองด้วย dir ในบรรทัดคำสั่ง แต่เพียงชื่อรายการขนาดไฟล์ ecc ..


การแก้ปัญหาด้วย ExifTool

IMO ข้อตกลงที่ดีที่สุดพร้อมกับคำสั่งที่เขียนไว้แล้วในชื่อไฟล์ของ. exe มันเป็นสคริปต์ที่ใช้ลากและวางได้ทุกที่ที่คุณต้องการ!

ปรับปรุง
เพื่อความสะดวกฉันได้แก้ไขชื่อไฟล์แบบอินไลน์ของ exe เป็นเล็กน้อย

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

ด้วยวิธีนี้ฉันได้ลดขนาดไฟล์. txt ให้เหลือหนึ่งบรรทัดต่อภาพ ( -T ) และเพิ่มตัวเลือกแบบเรียกซ้ำ ( -r ) เพื่อให้สามารถประมวลผลโฟลเดอร์ย่อยได้เช่นกัน


วิธีแก้ปัญหาด้วย ImageMagick

ฉันวางไว้ด้านล่างโซลูชันของฉันด้วย ImageMagick ค่อนข้างเร็วและง่าย แต่ ofc ต้องติดตั้งห้องสมุด

คำตอบ:


6

การใช้ 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 ) ไปยังไฟล์ชื่อ Details.txt ในไดเรกทอรีปัจจุบัน ในกรณีนี้ผลลัพธ์จะประกอบด้วยชื่อภาพและขนาดสำหรับ GIF ทั้งหมดในไดเรกทอรีปัจจุบัน รายละเอียดเพิ่มเติมเกี่ยวกับ -w พารามิเตอร์รวมถึงความหมายของ +, ! และ %0f ดูได้ที่ลิงค์เอกสารด้านบน

คุณสามารถ ประกอบด้วย ส่วนขยายเพิ่มเติมที่ต้องดำเนินการโดยใช้ -ext jpg -ext png และอื่น ๆ หรือลบ -ext gif พร้อมกันเพื่อให้อ่านไฟล์ทุกประเภทที่รองรับ

--ext exe จะใช้ในการ ไม่รวม EXE ทั้งหมด (เพื่อให้การปฏิบัติการของโปรแกรมไม่รวมอยู่ในรายงาน)

-r สามารถเพิ่มได้แน่นอนเพื่อเปิดใช้งานการประมวลผลแบบเรียกซ้ำ

นั่นคือ จำนวนมาก มากกว่าที่คุณสามารถทำได้ด้วยโปรแกรมที่ให้ประสิทธิภาพที่น่าขัน (และสามารถขยายได้มากเกินไปเนื่องจากแหล่ง Perl แบบเต็มสามารถใช้ได้อย่างอิสระ)!


ดูน่าสนใจ แต่ฉันติดอยู่นิดหน่อยฉันใช้มันเพื่อเอาท์พุทขนาดภายในหน้าต่างคำสั่งหลังจากที่ฉันเปิดรูปภาพด้วยการลากวาง ฉันจะทำให้มันสร้างไฟล์. txt ด้วยเอาต์พุตได้อย่างไร ฉันจะวางไฟล์. exe ในโฟลเดอร์ดับเบิ้ลคลิกและทำเวทมนต์ได้อย่างไร? ขอบคุณสำหรับคำตอบ
Gruber

@Guber: คำสั่งเหล่านั้นจะต้องพิมพ์ที่ command prompt หากต้องการเปลี่ยนเส้นทางไปยังไฟล์ข้อความคุณสามารถเพิ่ม > Details.txt ที่ส่วนท้ายของคำสั่ง ฉันมีวิธีแก้ปัญหาแบบคลิกเดียวที่ดีกว่าสำหรับปัญหาของคุณ ดูคำตอบที่แก้ไขข้างต้น
Karan

ตอนนี้มันน่าทึ่งมาก! ขอบคุณสำหรับการขยายคำตอบของคุณด้วยสคริปต์ในชื่อไฟล์. exe มีประโยชน์มาก :)
Gruber

@Guber: ยินดีต้อนรับคุณดีใจที่พบว่ามีประโยชน์ :)
Karan

1

ตกลงวิธีแก้ปัญหาด้วย ImageMagick ง่ายและรวดเร็ว (แต่ ofc ต้องใช้ไลบรารี)

เปิดบรรทัด cmd ในโฟลเดอร์ที่คุณสนใจ ( เปลี่ยน + คลิกขวา ภายในหน้าต่างโฟลเดอร์ของคุณและเลือก "เปิดหน้าต่างคำสั่งที่นี่") จากนั้นใน cmd prompt ใช้สิ่งนี้

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

โทรหา %f filename, %w width และ %h height จัดรูปแบบเช่น "WIDTHxHEIGHT"

ข้อมูลเพิ่มเติมที่นี่ http://www.imagemagick.org/script/escape.php


1

มี สคริปต์ 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

สิ่งนี้ไม่ทำงานเนื่องจากคุณตั้งค่าโฟลเดอร์ ฉันต้องการให้มันทำงานในโฟลเดอร์ใดก็ได้ที่ฉันวางสคริปต์ไว้ สิ่งนี้สามารถแก้ไขได้อย่างไร?
Gruber

ใช้ ". ' สำหรับไดเรกทอรีปัจจุบันดังนั้นบรรทัด 1 จะกลายเป็น: param ($ folder = ".", $ outputFile = "details.txt")
DrMoishe Pippik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.