Imagemagick Buchseiten teilen und umbenennen per Batch
Moin zusammen,
bin hier superneu und hoffe geholfen zu werden
.
Ich suche Hilfe beim teilen und umbenennen von gescannten Buchseiten. Am besten per Batch Aufruf.
Da ich scripte absolut nicht verstehe, hier mein anliegen.
Es sind diverse Ordner mit gescannten Buchseiten vorhanden. Jeweils zwei Buchseiten als ein Bild im Tif Format.
Mit Imagemagick ist es möglich Bilder genau zu halbieren, egal wie Groß das Eingangsbild ist. Also immer die Hälfte.
Wunsch ist es, die Bilder in diversen Unterordnern zu halbieren und den Dateinamen zu erweitern.
Imagemagick ist in den System-Variablen eingetragen. Befehle funktionieren aus beliebigen CMD Fenstern.
Der Befehl
halbiert alle Bilder eines Ordners aus dem der Befehl gestartet wurde und benennt sie in Cropped_00001.tif, Cropped_00002.tif, Cropped_00003.tif, usw..
Alle Dateien müssen hinterher wieder mit z.B. Total Commander oder Bulk Rename umbenannt werden. Recht mühsam.
Jetzt habe ich folgenden Code im Netz gefunden und als split.bat auf dem Desktop abgelegt.
Jedes Bild welche auf diese Datei gezogen wird, wird halbiert und der Dateiname um -L bzw. -R erweitert. Also nahezu perfekt, aber eben nur für jedes Bild einzeln.
Welche Variablen / Schalter erledigen das für alle Bilder in einem Ordner, bzw.
in allen Unterordnern eines Ordners?
Traum wäre, wenn alle neuen halbierten Seiten eine Ebene höher in einen, dem Dateinamen oder Vaterverzeichnis mit dem Zusatz _Geteilt, entsprechenden Ordner verschoben werden.
Ich bin sicher es geht, nur ich bin zu blöd dazu.
Für Anregungen und Hilfe jetzt schon mal Danke.
bin hier superneu und hoffe geholfen zu werden
Ich suche Hilfe beim teilen und umbenennen von gescannten Buchseiten. Am besten per Batch Aufruf.
Da ich scripte absolut nicht verstehe, hier mein anliegen.
Es sind diverse Ordner mit gescannten Buchseiten vorhanden. Jeweils zwei Buchseiten als ein Bild im Tif Format.
Mit Imagemagick ist es möglich Bilder genau zu halbieren, egal wie Groß das Eingangsbild ist. Also immer die Hälfte.
Wunsch ist es, die Bilder in diversen Unterordnern zu halbieren und den Dateinamen zu erweitern.
Imagemagick ist in den System-Variablen eingetragen. Befehle funktionieren aus beliebigen CMD Fenstern.
Der Befehl
convert -crop 2x1@ -scene 1 "*.tif" Cropped_%05d.tif
halbiert alle Bilder eines Ordners aus dem der Befehl gestartet wurde und benennt sie in Cropped_00001.tif, Cropped_00002.tif, Cropped_00003.tif, usw..
Alle Dateien müssen hinterher wieder mit z.B. Total Commander oder Bulk Rename umbenannt werden. Recht mühsam.
Jetzt habe ich folgenden Code im Netz gefunden und als split.bat auf dem Desktop abgelegt.
@echo off
pushd "%~dp1"
convert "%~1" ^
-crop 2x1@ -write mpr:img -delete 0--1 ^
mpr:img -write "%~n1-L.tif" +delete ^
mpr:img[1] "%~n1-R.tif"
popd
exit /b
Jedes Bild welche auf diese Datei gezogen wird, wird halbiert und der Dateiname um -L bzw. -R erweitert. Also nahezu perfekt, aber eben nur für jedes Bild einzeln.
Welche Variablen / Schalter erledigen das für alle Bilder in einem Ordner, bzw.
in allen Unterordnern eines Ordners?
Traum wäre, wenn alle neuen halbierten Seiten eine Ebene höher in einen, dem Dateinamen oder Vaterverzeichnis mit dem Zusatz _Geteilt, entsprechenden Ordner verschoben werden.
Ich bin sicher es geht, nur ich bin zu blöd dazu.
Für Anregungen und Hilfe jetzt schon mal Danke.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 588207
Url: https://administrator.de/forum/imagemagick-buchseiten-teilen-und-umbenennen-per-batch-588207.html
Ausgedruckt am: 05.04.2025 um 01:04 Uhr
14 Kommentare
Neuester Kommentar
Moin,
Habe jetzt einfach mal angenommen wie das Vaterverzeichnis...
Anstatt der Bilder ziehst du nun einfach den oder die Ordner, die verarbeitet werden sollen, auf die Batchdatei.
Gruß Thomas
Zitat von @NoNerd:
Ich suche Hilfe beim teilen und umbenennen von gescannten Buchseiten. Am besten per Batch Aufruf.
sowas heute noch mit Batch zu machen *würg*Ich suche Hilfe beim teilen und umbenennen von gescannten Buchseiten. Am besten per Batch Aufruf.
Jedes Bild welche auf diese Datei gezogen wird, wird halbiert und der Dateiname um -L bzw. -R erweitert. Also nahezu perfekt, aber eben nur für jedes Bild einzeln.
Traum wäre, wenn alle neuen halbierten Seiten eine Ebene höher in einen, dem Dateinamen oder Vaterverzeichnis mit dem Zusatz _Geteilt, entsprechenden Ordner verschoben werden.
Entscheide dich mal... soll der neue Ordner nun wie das nun wie das Vaterverzeichnis+"_geteilt" oder wie der Dateiname+"_geteilt" heissen?Traum wäre, wenn alle neuen halbierten Seiten eine Ebene höher in einen, dem Dateinamen oder Vaterverzeichnis mit dem Zusatz _Geteilt, entsprechenden Ordner verschoben werden.
Habe jetzt einfach mal angenommen wie das Vaterverzeichnis...
@echo off
SetLocal EnableDelayedExpansion
For %%A in (%*) do (
For /f "Delims=" %%B in ('dir /s /b "%%~A\*.tif"') do (
Set dir=%%~dpB
for %%C in ("!dir:~0,-1!") do (
set ParentPath=%%~dpC
set ParentDir=%%~nxC
)
if "!ParentDir:~-7!" neq "geteilt" (
mkdir "!ParentPath!!ParentDir!_geteilt" >nul 2>&1
magick convert "%%B" -crop 2x1@ -write mpr:img -delete 0--1 mpr:img -write "!ParentPath!!ParentDir!_geteilt\%%~nB-L.tif" +delete mpr:img[1] "!ParentPath!!ParentDir!_geteilt\%%~nB-R.tif"
)
)
)
Anstatt der Bilder ziehst du nun einfach den oder die Ordner, die verarbeitet werden sollen, auf die Batchdatei.
Gruß Thomas
Ja, die Punkte im Ordnernamen lassen den Ordnernamen wie einen Dateiname inkl. Erweiterung wirken, daher muss Zeile 9 von "%%~nC" auf "%%~nxC" abgeändert werden.
Habe es oben entsprechend angepasst.
Habe es oben entsprechend angepasst.
Zitat von @NoNerd:
Es hängt jetzt nur in einer Dauerschleife.
Die halbierten Dateien werden wieder geteilt.
So, dürfte nun behoben sein.Es hängt jetzt nur in einer Dauerschleife.
Die halbierten Dateien werden wieder geteilt.
Zu Batch hast du "würg" kommentiert. Wie würdest du das handhaben?
Batch ist halt ein Dinosaurier und sollte längst ausgestorben verbuddelt und zu Kraftstoff verabreitet sein... sowas macht man heutzutage eigentlich mit Powershell.Gruß Thomas
Leg dir iregendwo ein Ordner an der z.B. "Skripte" heisst. Dort legst du folgendes Skript mit der Endung .PS1 rein:
Auf dieses Skript gehst du nun mit Rechtsklick > Kopieren, gehst anschließend an irgendeinen Ort, an dem du es gerne hättest und wählst Rechtsklick > Verknüpfung einfügen.
Auf diese Verknüpfung Rechtsklick > Eigenschaften und unter Registerkarte Verknüpfung ergänzt du unter "Ziel" vor dem Dateipfad zum Skript noch
also bei Ziel steht dann zum Beispiel z.B.
Auf diese Verknüpfung kannst du dann wie gewohnt die Ordner draufziehen.
Alternativ kannst du die Verknüpfung auch in den SendTo-Ordner legen. Dann kannst du später einfach die Ordner, die du mit dem Skript bearbweiten willst, auswählen und mit Rechtsklick > Senden An > Skriptname so die Ordner an das Skript schicken.
Zudem kannst du der Verknüpfung optional auch gleich noch ein schickes passendes Icon verpassen.
$Args | % {
ls -r "$_\*.Tif" | ? {$_.DirectoryName -notmatch "_geteilt$"} | % {
$Dir=(md -force "$($_.DirectoryName)_geteilt").Fullname
magick convert $_.Fullname -crop 2x1@ -write mpr:img -delete 0--1 mpr:img -write "$dir\$($_.BaseName)-L.tif" +delete mpr:img[1] "$dir\$($_.BaseName)-R.tif"
}
}
Auf dieses Skript gehst du nun mit Rechtsklick > Kopieren, gehst anschließend an irgendeinen Ort, an dem du es gerne hättest und wählst Rechtsklick > Verknüpfung einfügen.
Auf diese Verknüpfung Rechtsklick > Eigenschaften und unter Registerkarte Verknüpfung ergänzt du unter "Ziel" vor dem Dateipfad zum Skript noch
powershell -EP ByPass -File
Powershell -EP ByPass -File "C:\Skripte\Bilder teilen.PS1"
Auf diese Verknüpfung kannst du dann wie gewohnt die Ordner draufziehen.
Alternativ kannst du die Verknüpfung auch in den SendTo-Ordner legen. Dann kannst du später einfach die Ordner, die du mit dem Skript bearbweiten willst, auswählen und mit Rechtsklick > Senden An > Skriptname so die Ordner an das Skript schicken.
Zudem kannst du der Verknüpfung optional auch gleich noch ein schickes passendes Icon verpassen.
Moin,
Jo 🤣.
Du sollst natürlich nicht das Batchscript nehmen, sondern das Powershell-Script, dass ich oben gepostet habe, also das hier:
Gruß Thomas
Jo 🤣.
Du sollst natürlich nicht das Batchscript nehmen, sondern das Powershell-Script, dass ich oben gepostet habe, also das hier:
Zitat von @TK1987 :
$Args | % {
ls -r "$_\*.Tif" | ? {$_.DirectoryName -notmatch "_geteilt$"} | % {
$Dir=(md -force "$($_.DirectoryName)_geteilt").Fullname
magick convert $_.Fullname -crop 2x1@ -write mpr:img -delete 0--1 mpr:img -write "$dir\$($_.BaseName)-L.tif" +delete mpr:img[1] "$dir\$($_.BaseName)-R.tif"
}
}
Gruß Thomas
Das liegt daran, dass die Argumente immernoch von CMD geparsed werden - 100 Argumente sind da einfach zu viel (dürfte bei der Batch genauso wenig funktionieren).
Du kannst allerdings einfach den übergeordneten Ordner da drauf ziehen, das Skript geht sowieso dann alle Unterverzeichnisse durch.
Du kannst allerdings einfach den übergeordneten Ordner da drauf ziehen, das Skript geht sowieso dann alle Unterverzeichnisse durch.