majcho
Goto Top

Jpg-Datein mit FOR-Schleife zusammenfügen (concatenate)

Ich möchte zwei .jpg-Dateien zu einer Datei zusammenfügen. Dabei soll die Datei *a.jpg mit *b.jpg in *.jpg mit ImageMagic's Montage zusammengefügt werden. Weilter als mit diesem (fehlerhaften) Script komme ich nicht.

FOR /F "delims=" %%i in ('dir /a-d /b /s "*a.jpg"') & "delims=" %%g in ('dir /a-d /b /s "*b.jpg"') do (  
"C:\Program Files (x86)\ImageMagick\montage" -geometry +4+4 %%i %%g > %%~ni.tmp ))  
del *.jpg
ren *.tmp *.jpg

Content-ID: 178076

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

pieh-ejdsch
pieh-ejdsch 23.12.2011 um 19:14:35 Uhr
Goto Top
moin majcho,
hier wird es wie auch sonstwo gehalten - Wir begrüßen uns erstmal

hat es eine bestimmte Bewandtnis, dass Du wegen dem zusammenfügen von nur zwei Dateien eine (wenn auch nicht Funktionierende) Forschleife verwendest?

Gruß Phil
majcho
majcho 23.12.2011 um 19:31:24 Uhr
Goto Top
salve pieh-ejdsch,

gibt es denn eine bessere Möglichkeit .jpg-Dateien zusammenzufügen? Mir fällt in dem Fall die FOR-Schleife als einfachste Möglichkeit ein. Auch in deinem Tutorial "Wie Arbeite ich mit Batch UmgebungsVariablen? Erstellung Umgang Erweiterungen Veränderungen " habe ich zu meinem Problem keine passende Lösung gefunden. Ich könnte zwar die "UmgebungsVariablen mit Wegschnitt" von a und b arbeiten. Was ich jedoch für umständlich halte.

Ich möchte lediglich die Dateien 1050a.jpg 1050b.jpg zu 1050.jpg etc. zusammenfügen.
rubberman
rubberman 23.12.2011 um 20:31:08 Uhr
Goto Top
Hallo majcho,

sinvollerweise schaut man sich mal die Syntax eines Tools an, bevor man es verwendet. Hättest du das getan, wäre auch klar, dass es kein ">" in der Kommandozeile gibt.

Ohne dieses Tool downloaden zu wollen, würde ich mal was in der Art probieren:
"C:\Program Files (x86)\ImageMagick\montage" -geometry +4+4 "1050a.jpg" "1050b.jpg" "1050.jpg"
Sollte das funktionieren, kann man sich über die Verwendung von Schleifen unterhalten...

Grüße
rubberman
majcho
majcho 23.12.2011 um 20:39:02 Uhr
Goto Top
Hallo rubberman,

1050a.jpg + 1050b.jpg zu 1050.jpg war lediglich ein Beispiel. Es sollen hunderte von diesen Dateien zusammengefügt werden. Deshalb die FOR-Schleife.
rubberman
rubberman 23.12.2011 um 20:53:29 Uhr
Goto Top
Hallo majcho,

ich dachte ich hätte mich klar ausgedrückt: Erst testen, ob es mit 2 Dateien klappt, dann kann man über Schleifen nachdenken.
Weiterhin wäre es interessant zu wissen, ob wahllos Dateien zusammengefügt werden sollen, oder ob es eine Regel gibt, welche Dateien zusammen gehören.

Grüße
rubberman
majcho
majcho 23.12.2011 um 21:07:11 Uhr
Goto Top
Hallo rubbrman,

ja ich gebe zu mit der Umleitung ">" habe ich einen Fehler gemacht. Auch die Recherche im Tool gab keine Hinweis darauf, wie ich Dateien Massenweise zusammenfüge. Deshalb kam ich auf die Idee eine Pipe in der FOR-Schleife "|" oder das "&" zu verwenden. Als Fehlerrückmeldung habe ich ""|" kann syntaktisch an dieser Stelle nicht verarbeitet werden" erhalten. Habe es auch mit dem Wegschneiden des a's und b's probiert. Kam aber da auch nicht viel weiter. Dann die Recherche im Forum mit den Pipes kam ich auf keinen Treffer. Deshalb die Frage an euch Spezialisten.
bastla
bastla 23.12.2011 um 21:26:54 Uhr
Goto Top
Hallo majcho!

Es fehlt weiterhin eine Antwort auf die Frage, welche Dateien denn nun zusammengefügt werden sollen - soferne es tatsächlich immer Dateien, deren Name aus einer (gleichen) Nummer plus einem "a" bzw "b" besteht, sein sollen, dürfte ja
for /f "delims=" %%i in ('dir /a-d /b /s "*a.jpg"') do for /f "delims=a" %%n in ("%%~ni") do "C:\Program Files (x86)\ImageMagick\montage" -geometry +4+4 "%%~i" "%%~dpi%%nb.jpg" "%%~dpi%%n.jpg"
genügen (ungetestet) ...

Grüße
bastla

[Edit] Hallo rubberman! face-smile
Das Löschen der Einzeldateien sollte sich - wenn es nicht vom Erfolg des Zusammenfügens (per "&&") abhängig gemacht wird - auch bequem per "del /s /q *a.jpg" und "del /s /q *b.jpg" im Nachhinein erledigen lassen ...
[/Edit]
rubberman
rubberman 23.12.2011 um 21:31:19 Uhr
Goto Top
Hallo majcho,

die Fragen hast du trotzdem nicht beantwortet. Ab und zu solltest du mal die Posts lesen bevor du antwortest.

Schuss ins Blaue (also ungetestet!):
@echo off &setlocal
for %%i in (*a.jpg) do (
  set "name=%%~ni"  
  setlocal enableDelayedExpansion
  set "name=!name:~,-1!"  
  if exist "!name!b.jpg" (  
    ECHO "C:\Program Files (x86)\ImageMagick\montage" -geometry +4+4 "!name!a.jpg" "!name!b.jpg" "!name!.jpg"  
    ECHO del "!name!a.jpg"  
    ECHO del "!name!b.jpg"      
  )
  endlocal
)
pause
Wenn du denkst es könnte so funktionieren, entferne die ECHOs und teste an ein paar Beispieldateien.

Grüße
rubberman

EDIT: Hallo bastla face-wink
rubberman
rubberman 23.12.2011 um 22:11:16 Uhr
Goto Top
Hallo bastla!
Zitat von @bastla:
... vom Erfolg des Zusammenfügens (per "&&") abhängig gemacht wird ...

Das wäre natürlich sinnvoll. Zu dem Zweck müsste man wissen, ob das Tool einen Errorlevel setzt ... hmmm.

Grüße
rubberman
msr972
msr972 23.12.2011 um 22:22:42 Uhr
Goto Top
Moin,

ganz andere blöde Frage:
Wieso montage.exe? Ich sage mal eher Stichwort convert.exe

Und wenn man http://www.imagemagick.org/Usage/layers/ liest, findet man ganz schnell die richtigen Befehle..
Oder die Übersicht: http://www.imagemagick.org/Usage/

Gruß
majcho
majcho 23.12.2011 um 22:54:15 Uhr
Goto Top
Montage ist der Befehl zum Zusammenfügen von Bildern. Auch "concatenate" genannt.
http://www.imagemagick.org/Usage/montage/#concatenate

Alternativ ist auch das möglich
montage 1050ajpg 1050b.jpg -mode Concatenate -tile x1 1050.jpg

@bastla
@rubberman

Besten Dank für eure Hilfe! So funktioniert es.