martin.s
Goto Top

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:
@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?

Content-ID: 184848

Url: https://administrator.de/contentid/184848

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

Skyemugen
Skyemugen 11.05.2012 um 10:15:21 Uhr
Goto Top
Aloha,

... guck doch mal in der Formatierungshilfe dort findest du auch ##blue|## ...

Soso die Batch steigt also aus, na ob dir Zeile 1 dann eine Hilfe ist bei der Fehlersuche? Die Textdatei kannst du dir btw. auch sparen, wozu gibt es denn for /f

greetz André
Martin.S
Martin.S 11.05.2012 um 10:31:41 Uhr
Goto Top
So, Code markiert.
Die erste Zeile habe ich so geändert, dass nun eine Ausgabe erscheint (@ECHO ON). Allerdings hilft mir das in meinem Fall nicht weiter: Lasse ich die Textdatei weg, wird die For-Schleife immer noch nicht durchlaufen. So weit müsste ich ja erstmal kommen ;)

Gruß
Martin
Jochem
Jochem 11.05.2012 um 10:58:48 Uhr
Goto Top
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 face-smile chem
pieh-ejdsch
pieh-ejdsch 11.05.2012 um 11:06:06 Uhr
Goto Top
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
mak-xxl
mak-xxl 11.05.2012 um 11:17:34 Uhr
Goto Top
Moin Martin,

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
Martin.S
Martin.S 11.05.2012 um 12:49:33 Uhr
Goto Top
Zitat von @mak-xxl:
Moin Martin,

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 Mario,

vielen Dank, bis auf die Rekursion genau das was ich wollte. Leider werden hier in dem neuen Ordner die bestehenden Unterordner nicht mit angelegt. Das sollte ich aber, hoffentlich, alleine hinbekommen.

Danke Dir!

Gruß
Martin
pieh-ejdsch
pieh-ejdsch 11.05.2012 um 13:41:41 Uhr
Goto Top
Hallo Martin,

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
mak-xxl
mak-xxl 11.05.2012 um 14:22:51 Uhr
Goto Top
Moin Martin,

... 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
Martin.S
Martin.S 11.05.2012 um 15:05:46 Uhr
Goto Top
Hallo Mario,

ich habe mir zum Testen mal einen Ordner mit zwei Unterordnern gebaut. In jedem Unterordner sind *.bmp-Dateien drinnen. Den Zielordner gibt es noch nicht (Wird ein Ordner auf meinem Desktop). Wenn ich Deine Batch ausführe, konvertiert diese die Dateien auch brav in den neu angelegten Ordner, allerdings werden keine Unterordner angelegt, sondern alle Dateien in die root des neuen Ordners konvertiert.

@phil: Danke für Deine Mühe, aber bei mir funktioniert die Batch nicht - weiß der Geier, warum nicht...
(Pfade natürlich angepasst ;) )

Gruß
Martin
pieh-ejdsch
pieh-ejdsch 11.05.2012 um 17:43:36 Uhr
Goto Top
Hallo Martin,

hast Du bei Quelle auch die Dateimaske mit angegeben?
Bei mir tut der Batch was er soll.

@mario -da kannste auch Zeile 7 und 8 verschmelzen
    "%application%" "%%i" /convert "!pfad:%quelle%=%ziel%!.jpeg"  

Gruß Phil
mak-xxl
mak-xxl 11.05.2012 um 19:02:55 Uhr
Goto Top
Moin Phil,

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
pieh-ejdsch
pieh-ejdsch 12.05.2012 um 12:50:16 Uhr
Goto Top
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