Jens A. Koch

Alle “tif”-Bilder eines Verzeichnisses rekursiv in “jpg” umwandeln (Batch für IrfanView)

Folgende Codezeilen sind eine kleine Stapelverarbeitung, die jegliche “tif”-Bilder und Unterverzeichnisse einer Quell-Verzeichnisstruktur rekursiv auf einen Zielpfad abbildet. Die Konvertierung erledigt IrfanView. Wer Verbesserungsvorschläge hat und eine elegantere Lösungen unterbreiten möchte, kann ja einen Kommentar hinterlassen.

@echo off
cls
set IRFANVIEW=%ProgramFiles%\IrfanView\i_view32.exe
set QUELLPFAD=C:\quellverzeichnis\bilder
set ZIELPFAD=C:\zielverzeichnis\bilder
set PARAMETER parameter=/resize_long=(200,0) /aspectratio /resample /aspectratio /jpgq=85 /killmesoftly

FOR /r %QUELLPFAD% %%a IN (*.tif) DO (

@REM wenn das Verzeichnis "ZIELPFAD/Pfad %%a" nicht existiert, erstelle Verzeichnis
if not exist %ZIELPFAD%%%~pa mkdir "%ZIELPFAD%%%~pa"

@REM wenn die Zieldatei noch nicht existiert, dann IrfanView Convert ausführen
if not exist "%ZIELPFAD%%%~pa%%~na.jpg" %IRFANVIEW% %%a %PARAMETER% /convert="%ZIELPFAD%%%~pa%%~na.jpg"

)

 

 

Tags: , , , , , . 2 Comments »

2 Responses

  1. Ömer Says:

    Hi Leute,

    ich verwende auch das irfanview um tif in jpg umzuwandeln. ich mach es mit einem C# progrämmchen siehe unten.

    Schöne Grüße

    Ömer

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace MediaConversion
    {
    // medapro daten als webfaehiges format umwandeln
    class MediaConversion
    {
    public string sourcedir = @”C:\source”; // rootdir von medapro daten
    public string irfan_main = “C:\\\”Program Files (x86)\”\\IrfanView\\”;
    public string irfan_bin = “i_view32.exe”;
    public string targetdir = @”C:\target”;
    public string quelldateityp = “*.tif”;
    public string targetdateityp = “*.jpg”;

    public static void Main(string[] args)
    {
    MediaConversion mc = new MediaConversion();
    mc.convert();
    }

    public void convert()
    {
    // changedirectory to irfan

    this.convert(sourcedir, targetdir);
    }
    private void convert(string dir, string targetdir)
    {
    System.IO.DirectoryInfo di = new DirectoryInfo(dir);

    DirectoryInfo[] subdirs = di.GetDirectories();

    //in target anlegen wenn nötig
    DirectoryInfo diTarget = new DirectoryInfo(targetdir);
    if ( !diTarget.Exists ) {
    diTarget.Create();

    }

    // Kommando erzeugen abschicken!
    String command = irfan_bin + ” ” + di.FullName + “\\” + quelldateityp + ” /advancedbatch /convert=” + targetdir + “\\” + targetdateityp;
    this.executeDos(command);

    // Die subdirectorys
    foreach (DirectoryInfo one in subdirs)
    {
    Console.WriteLine(one.FullName);
    this.convert(one.FullName, targetdir + “\\” + one.Name);
    }

    }

    public void executeDos(String command)
    {

    Console.WriteLine(“command: ” + command);
    try
    {
    String lf = Environment.NewLine;
    ProcessStartInfo psi = new ProcessStartInfo(“cmd.exe”)
    {
    UseShellExecute = false,
    RedirectStandardInput = true
    };
    Process proc = new Process() { StartInfo = psi };

    proc.Start();

    proc.StandardInput.WriteLine(“cd ” + irfan_main );

    proc.StandardInput.WriteLine(command + lf + “Exit”);

    proc.WaitForExit();
    proc.Close();
    }
    catch (Exception objException)
    {
    // Log the exception
    Console.WriteLine(“Fehler beim Verarbeiten des Dos Befehls”);

    }
    }
    }
    }

  2. jakoch Says:

    Klaro, ist auch eine Lösung!
    Danke für den Code-Schnipsel :)