Variable um eine andere Variable kürzen
Hallo zusammen,
Ich möchte per Batchdatei in Verbindung mit irfanview Dateien kopieren/konvertieren und in einem zweiten Schritt nochmal zusätzlich umbenennen.
Grafisch von irfanview ist das alles kein Thema, aber es soll automatisiert werden.
Ausgangspunkt ist, ich habe ein Quellverzeichnis, wo ca. 6 GB jpg-Dateien drin liegen, diese sollen einmal mit der längsten Seite 500 und einmal mit der längsten Seite 300 (dann aber mit dem Dateinamenzusatz "_vorschau" in ein neues Verzeichnis mit gleicher Verzeichnisstruktur kopiert/konvertiert werden.
Folgende Batchdatei funktioniert schon mal ganz gut, aber was mir noch fehlt, ist der Variableninhalt für das aktuelle Unterverzeichnis, ohne Dateinamen.
Es würde theoretisch auch reichen, wenn ich die Länge der Dateinamenariable !ziel4! auslesen kann und diese von der Variable !ziel3! "abziehen" kann. Aber da klemmts bei mir irgendwie.
Hat jemand eine Idee, einen Tip oder vielleicht sogar ein andere Lösung?
Vielen Dank im voraus
chris
Ich möchte per Batchdatei in Verbindung mit irfanview Dateien kopieren/konvertieren und in einem zweiten Schritt nochmal zusätzlich umbenennen.
Grafisch von irfanview ist das alles kein Thema, aber es soll automatisiert werden.
Ausgangspunkt ist, ich habe ein Quellverzeichnis, wo ca. 6 GB jpg-Dateien drin liegen, diese sollen einmal mit der längsten Seite 500 und einmal mit der längsten Seite 300 (dann aber mit dem Dateinamenzusatz "_vorschau" in ein neues Verzeichnis mit gleicher Verzeichnisstruktur kopiert/konvertiert werden.
Folgende Batchdatei funktioniert schon mal ganz gut, aber was mir noch fehlt, ist der Variableninhalt für das aktuelle Unterverzeichnis, ohne Dateinamen.
Es würde theoretisch auch reichen, wenn ich die Länge der Dateinamenariable !ziel4! auslesen kann und diese von der Variable !ziel3! "abziehen" kann. Aber da klemmts bei mir irgendwie.
Hat jemand eine Idee, einen Tip oder vielleicht sogar ein andere Lösung?
@echo off & setlocal enabledelayedexpansion
set iview=%ProgramFiles%\IrfanView\i_view32.exe
set PfadQuelle=C:\Dokumente\bilder\testquelle
set PfadZiel=E:\Bilder\test
set resize_gross="/resize_long=500 /aspectratio /jpgq=85 /resample"
set resize_klein="/resize_long=300 /aspectratio /jpgq=85 /resample"
for /r %PfadQuelle% %%I in (*.jpg) do (
rem ziel2 kompletter Pfad + Dateiname ohne Laufwerksbuchstabe
set ziel2=%%~pnxI
rem ziel3 = Unterverzeichnis + Dateiname, durch abtrennen ab dem 53. Zeichen von ziel2
set ziel3=!ziel2:~52,250!
rem ziel4 = nur Dateiname
set ziel4=%%~nxI
%iview% %%I %resize_gross% /ini="C:\Dokumente\iview\gross\" /convert=%PfadZiel%\!ziel3!
rem erster vergeblicher Versuch die Variable zu kürzen
rem set ziel5=!ziel3:~-!ziel4!!
rem %iview% %%I %resize_klein% /ini="C:\Dokumente\iview\klein\" /convert=%PfadZiel%\!ziel5!!ziel5!%%~nI_vorschau%%~xI
)
chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 94259
Url: https://administrator.de/contentid/94259
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Chris3000!
Falls %ziel3% nur noch einen einzigen "\" enthielte, hättest Du einen passender Delimiter für ein "for /f" (Ergebnis: Ordnername ohne "\") ...
... oder Du übergibst %ziel3% an ein "gewöhnliches for" und extrahierst daraus den Pfad (Ergebnis: Ordnername mit "\" an Anfang und Ende) ...
... oder Du löst es tatsächlich über die Ersetzung (Ergebnis: Ordnername mit "\" am Ende):
Um bei dieser Variante dann auch gleich den abschließenden "\" zu eliminieren:
Grüße
bastla
[Edit] Zur Sicherheit bei Variante 2 noch ein Laufwerk "spendiert" [/Edit]
Falls %ziel3% nur noch einen einzigen "\" enthielte, hättest Du einen passender Delimiter für ein "for /f" (Ergebnis: Ordnername ohne "\") ...
for /f "delims=\" %%a in ("%ziel3%") do set "ziel5=%%a"
for %%a in ("C:\%ziel3%") do set "ziel5=%%~pa"
set "ziel5=!ziel3:%ziel4%=!"
set "ziel5=!ziel3:\%ziel4%=!"
bastla
[Edit] Zur Sicherheit bei Variante 2 noch ein Laufwerk "spendiert" [/Edit]
Hallo chris3000!
Stringlängenbestimmung in Batch ist mangels passender Funktion etwas aufwändig (obwohl es mit der Biber-Variante
oder zB dieser Schleife - "delayedExpansion" wird ja ohnehin bereits benötigt -
auch etwas einfacher geht), aber hier vermutlich auch gar nicht erforderlich.
Aufgrund Deiner Beispieldaten komme ich zwar nicht auf 52 (sondern nur auf 30 für "C:\Dokumente\bilder\testquelle"), aber es geht doch eigentlich, wenn ich das richtig verstehe, um den relativen Pfad unterhalb von %PfadQuelle% - wenn dem so ist, sollte
funktionieren.
Ansonsten bitte ein entsprechendes Beispiel posten ...
Grüße
bastla
Stringlängenbestimmung in Batch ist mangels passender Funktion etwas aufwändig (obwohl es mit der Biber-Variante
echo %PfadQuelle%>%temp%\Lang.tmp
for %%i in (%temp%\Lang.tmp) do set /a L=%%~zi-2
set /a L=0
:Loop
if "!PfadQuelle:~%L%,1!" neq "" set /a L+=1 & goto :Loop
Aufgrund Deiner Beispieldaten komme ich zwar nicht auf 52 (sondern nur auf 30 für "C:\Dokumente\bilder\testquelle"), aber es geht doch eigentlich, wenn ich das richtig verstehe, um den relativen Pfad unterhalb von %PfadQuelle% - wenn dem so ist, sollte
set "PfadAbsolut=%%~fi"
set ziel3=!PfadAbsolut:%PfadQuelle%\=!
Ansonsten bitte ein entsprechendes Beispiel posten ...
Grüße
bastla