Dateien kopieren und konvertieren mit IrfanView per Batch
Hallo,
ich versuche mich gerade daran, die Konvertierung von *.bmp-Dateien in *.jpeg-Dateien mit IrfanView über eine Batch laufen zu lassen und bräuchte da ein bisschen Hilfe.
Wir haben hier mehrere *.bmp-Dateien, die übers Netzwerk transportiert werden sollen. Jede *.bmp-Datei ist etwa 5MB groß. Diese soll verkleinert werden, um Bandbreite zu sparen.
Über IrfanView kann man die Dateien in *.jpeg konvertieren. Die 5MB sind dann nur noch 290KB. Allerdings ist die Methode über die GUI von IrfanView ziemlich umständlich, deshalb möchte ich das über eine Batch machen. Den Befehl zum Konvertieren hab ich schon gefunden, für Dateien, die in einem Ordner liegen, funktioniert das auch.
Allerdings muss ich Dateien konvertieren und kopieren, einschließlich der Unterordner. Ich möchte im Zielordner die gleiche Ordnerstruktur wie im Quellordner anlegen.
Folgendes habe ich bereits:
So wie ich das gelesen habe, kann ich das nicht über eine Do-While-Schleife laufen lassen. Die einzige Möglichkeit einer Rekursion ist also, die Dateien und Ordner auszulesen und in einer Liste zu speichern und dann in der For-Schleife diese Liste anzuarbeiten.
Allerdings steigt die Batch nach der Ausgabe, dass die Datei erstellt worden ist, aus und ich weiß nicht woran das liegt.
Ich bin für jede Hilfe dankbar.
Gruß
Martin
P.S.: Wie kann ich denn hier Code markieren?
ich versuche mich gerade daran, die Konvertierung von *.bmp-Dateien in *.jpeg-Dateien mit IrfanView über eine Batch laufen zu lassen und bräuchte da ein bisschen Hilfe.
Wir haben hier mehrere *.bmp-Dateien, die übers Netzwerk transportiert werden sollen. Jede *.bmp-Datei ist etwa 5MB groß. Diese soll verkleinert werden, um Bandbreite zu sparen.
Über IrfanView kann man die Dateien in *.jpeg konvertieren. Die 5MB sind dann nur noch 290KB. Allerdings ist die Methode über die GUI von IrfanView ziemlich umständlich, deshalb möchte ich das über eine Batch machen. Den Befehl zum Konvertieren hab ich schon gefunden, für Dateien, die in einem Ordner liegen, funktioniert das auch.
Allerdings muss ich Dateien konvertieren und kopieren, einschließlich der Unterordner. Ich möchte im Zielordner die gleiche Ordnerstruktur wie im Quellordner anlegen.
Folgendes habe ich bereits:
@echo off
@echo
set ziel="C:\users\xxx\Desktop\Test2"
set quelle="C:\xxx\Dokumente\Bilder"
set application="C:\Program Files (x86)\IrfanView\i_view32.exe"
dir /b /s %quelle% > "C:\users\xxx\Desktop\files.txt"
@ECHO Datei erstellt.
PAUSE
echo %ziel%
echo %quelle%
IF NOT EXISTS "%ziel%" MD "%ziel%"
FOR %%f IN ("C:\users\xxx\Desktop\files.txt") DO (
IF NOT EXISTS "%ziel%\%%f"
(
"C:\Program Files (x86)\IrfanView\i_view32.exe" %quelle%\%%f /convert %ziel%*.jpeg
robocopy /s "%quelle%\%%f" ""%ziel%\%%f""
)
)
rm "C:\users\xxx\Desktop\files.txt"
PAUSE
So wie ich das gelesen habe, kann ich das nicht über eine Do-While-Schleife laufen lassen. Die einzige Möglichkeit einer Rekursion ist also, die Dateien und Ordner auszulesen und in einer Liste zu speichern und dann in der For-Schleife diese Liste anzuarbeiten.
Allerdings steigt die Batch nach der Ausgabe, dass die Datei erstellt worden ist, aus und ich weiß nicht woran das liegt.
Ich bin für jede Hilfe dankbar.
Gruß
Martin
P.S.: Wie kann ich denn hier Code markieren?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184848
Url: https://administrator.de/contentid/184848
Ausgedruckt am: 05.11.2024 um 12:11 Uhr
12 Kommentare
Neuester Kommentar
Moin,
welche Version von IrfanView benutzt Du? Bereits ab der 3.x-Version gab es den wunderbaren Menüpunkt "Batch-Konvertierung/Umbenennen". Und o Wunder, dort kann man BMPs in JPGs umwandeln und sogar vorgeben, wie groß das Ergebnis werden soll. Und zu allem Überfluß läßt sich das Ganze auch noch samt Unterverzeichnissen in einen anderen Zielordner kopieren. Funktioniert auf Knopfdruck und ist alles bereits mehrfach getestet unter Vers. 4.27.
Gruß J chem
welche Version von IrfanView benutzt Du? Bereits ab der 3.x-Version gab es den wunderbaren Menüpunkt "Batch-Konvertierung/Umbenennen". Und o Wunder, dort kann man BMPs in JPGs umwandeln und sogar vorgeben, wie groß das Ergebnis werden soll. Und zu allem Überfluß läßt sich das Ganze auch noch samt Unterverzeichnissen in einen anderen Zielordner kopieren. Funktioniert auf Knopfdruck und ist alles bereits mehrfach getestet unter Vers. 4.27.
Gruß J chem
moin Martin,
Dafür gibt es auch schon einen Batch Dateigröße von Bildern per Batch anpassen?.
Der konvertiert und die Bildchen liegen dann in den Angegeben neuen Ordner.
Gruß Phil
Dafür gibt es auch schon einen Batch Dateigröße von Bildern per Batch anpassen?.
Der konvertiert und die Bildchen liegen dann in den Angegeben neuen Ordner.
Gruß Phil
Moin Martin,
und um doch erst einmal die obige Baustelle aufzuklaren, etwa so:
Freundliche Grüße von der Insel - Mario
und um doch erst einmal die obige Baustelle aufzuklaren, etwa so:
@echo off & setlocal
set "ziel=C:\users\xxx\Desktop\Test2"
set "quelle=C:\xxx\Dokumente\Bilder"
set "application=C:\Program Files (x86)\IrfanView\i_view32.exe"
for /f "delims=" %%i in ('dir /b /s %quelle%\*.bmp') do %application% %%i /convert %ziel%\%%~ni.jpeg
Freundliche Grüße von der Insel - Mario
Hallo Martin,
das mit der Rekursion hatte ich übersehen. Mit hilfe eines Vorschau xcopy Vllt In etwa so.
Gruß Phil
das mit der Rekursion hatte ich übersehen. Mit hilfe eines Vorschau xcopy Vllt In etwa so.
@echo off
setlocal disabledelayedexpansion
set "ziel=C:\users\xxx\Desktop\Test2"
set "quelle=C:\xxx\Dokumente\Bilder\*.bmp"
set application="C:\Program Files (x86)\IrfanView\i_view32.exe"
for /f delims^= %%i in ('xcopy /flis "%quelle%" "%ziel%" ^|findstr /vb [0-9] ') do (set "File=%%i"
setlocal enabledelayedexpansion
for /f "tokens=1,2delims=?" %%j in ("!File: -> =?!" ) do endlocal & %application% "%%~j" /convert "%%~dpnk.jpeg"
)
Gruß Phil
Moin Martin,
Wenn Du den kompletten Quellpfad unter dem Zielpfad wiederfinden willst (mit obigen Einschränkungen), dann änderst Du Zeile 5 so ab:
Soll der Quellpfad ab
Zeile 7 lässt sich weniger 'hardcoded' darstellen, wenn die Pfadangaben zu Beginn des Scriptes feiner granuliert werden.
Freundliche Grüße von der Insel - Mario
... Leider werden hier in dem neuen Ordner die bestehenden Unterordner nicht mit angelegt.
Wenn Du den kompletten Quellpfad unter dem Zielpfad wiederfinden willst (mit obigen Einschränkungen), dann änderst Du Zeile 5 so ab:
for /f "delims=" %%i in ('dir /b /s /a:-d %quelle%\*.bmp') do %application% "%%i" /convert "%ziel%\%%~pni.jpeg"
Soll der Quellpfad ab
'\Bilder'
im Zielpfad auftauchen, dann etwa so:@echo off & setlocal enabledelayedexpansion
set "ziel=C:\users\xxx\Desktop\Test2"
set "quelle=C:\users\xxx\Dokumente\Bilder"
set "application=C:\Program Files (x86)\IrfanView\i_view32.exe"
for /f "delims=" %%i in ('dir /b /s /a:-d %quelle%') do (
set "pfad=%%~pni"
set "pfad=!pfad:\users\xxx\Dokumente=!"
"%application%" "%%i" /convert "%ziel%!pfad!.jpeg"
)
Zeile 7 lässt sich weniger 'hardcoded' darstellen, wenn die Pfadangaben zu Beginn des Scriptes feiner granuliert werden.
Freundliche Grüße von der Insel - Mario
Moin Phil,
hier mal ein Screen-Dump davon, was dann passiert:
Kein Tauschwillen erkennbar ... (siehe Unterschied Quell- und Zielpfad)
Ein schönes Wochenende und freundliche Grüße von der Insel - Mario
hier mal ein Screen-Dump davon, was dann passiert:
Quelle C:\users\xxx\Dokumente\Bilder
Ziel C:\users\xxx\Desktop\Test2
1. set "pfad1=%%~pni"
set "pfad1=!pfad1:\users\xxx\Dokumente=!"
echo 1. "%ziel%!pfad1!.jpeg"
2. set "pfad2=%%~pni"
set "pfad2=!pfad2:%quelle%=%ziel%!"
echo 2. "%ziel%!pfad2!.jpeg"
1. "C:\users\xxx\Desktop\Test2\Bilder\1.jpeg"
2. "C:\users\xxx\Desktop\Test2\users\xxx\Dokumente\Bilder\1.jpeg"
Kein Tauschwillen erkennbar ... (siehe Unterschied Quell- und Zielpfad)
Ein schönes Wochenende und freundliche Grüße von der Insel - Mario
Moin Mario,
das geht natülich nur, wenn der Vollständige Pfad in der Variable "pfad" ist.
Du nimmst ja kein Laufwerk mit in die Variable auf. zu spät gesehn
Sonst kannst Du auch auf diese Extraschnippelei verzichten.
Dabei ist auch völlig egal ob Du in Quelle: "users" schreibst oder "USERS"
Die Auflistung erfolgt nach der Schreibweise.
Gruß Phil
das geht natülich nur, wenn der Vollständige Pfad in der Variable "pfad" ist.
Du nimmst ja kein Laufwerk mit in die Variable auf. zu spät gesehn
Sonst kannst Du auch auf diese Extraschnippelei verzichten.
Dabei ist auch völlig egal ob Du in Quelle: "users" schreibst oder "USERS"
Die Auflistung erfolgt nach der Schreibweise.
Gruß Phil