Variablen abfragen, deren Name sich teils aus anderen Variablen ergibt
In einer Batchdatei habe ich 3 Variablen mit den schönen Namen bildordner_1_1, bildordner_1_2 und bildordner_1_3 die jeweils eine Pfadangabe enthalten. Die erste und zweite Zahl ist im nachfolgenden Script jeweils eine weitere Variable, die im Verlauf der Ausführung heraufgezählt wird...
In einer Batchdatei habe ich 3 Variablen mit den schönen Namen bildordner_1_1, bildordner_1_2 und bildordner_1_3 die jeweils eine Pfadangabe enthalten. Die erste und zweite Zahl ist im nachfolgenden Script jeweils eine weitere Variable, die im Verlauf der Ausführung heraufgezählt wird...
im Folgescript prüfe ich nun ab, ob die variablen überhaupt existieren und kann dadurch feststellen, ob das script die schleife verlassen soll, oder nicht:
funktioniert ganz prima, existenz wird bestätigt und das script läuft in die verarbeitungsphase
im nächsten Schritt soll allerdings die Existenz des Ordners in der Variable bestätigt werden, also:
das problem: anders als "if defined" geht "if exist" - und jeder andere befehl auf komandozeile - nicht davon aus, dass der ihm übergebene string eine variable ist. Ergebnis ist, das die Variablen %a% und %b% aufgelöst werden und das script nicht nach dem ordner sucht, den die variable enthält, sondern nach einem ordner mit dem namen "bildordner_1_1"
sieht irgendjemand eine lösung für mein dilemma? (ich würde nur ungern auf eine lösung mit schleifen verzichten, da sich der scriptumfang dank vieler benötigter bilderordner auf gut das 100fache des aktuellen umfangs erhöhen würde ;)
Danke schonmal für eure Hilfe
informationshalber hier noch das ganze script:
In einer Batchdatei habe ich 3 Variablen mit den schönen Namen bildordner_1_1, bildordner_1_2 und bildordner_1_3 die jeweils eine Pfadangabe enthalten. Die erste und zweite Zahl ist im nachfolgenden Script jeweils eine weitere Variable, die im Verlauf der Ausführung heraufgezählt wird...
im Folgescript prüfe ich nun ab, ob die variablen überhaupt existieren und kann dadurch feststellen, ob das script die schleife verlassen soll, oder nicht:
if not defined bildordner_%a%_%b% (goto :eof)
im nächsten Schritt soll allerdings die Existenz des Ordners in der Variable bestätigt werden, also:
if not exist "bildordner_%a%_%b%\" (mkdir "bildordner_%a%_%b%\")
das problem: anders als "if defined" geht "if exist" - und jeder andere befehl auf komandozeile - nicht davon aus, dass der ihm übergebene string eine variable ist. Ergebnis ist, das die Variablen %a% und %b% aufgelöst werden und das script nicht nach dem ordner sucht, den die variable enthält, sondern nach einem ordner mit dem namen "bildordner_1_1"
sieht irgendjemand eine lösung für mein dilemma? (ich würde nur ungern auf eine lösung mit schleifen verzichten, da sich der scriptumfang dank vieler benötigter bilderordner auf gut das 100fache des aktuellen umfangs erhöhen würde ;)
Danke schonmal für eure Hilfe
informationshalber hier noch das ganze script:
::############################################################################################################
::############################################# GLOBALE VARIABLEN ############################################
::############################################################################################################
::set prompt=$H
::@echo off
cls
:allg_variablen
set nconvert=C:\Programme\XnView\nconvert.exe
if not exist "%nconvert%" ((set istfehler=1) & (echo fehler: nconvert nicht unter %nconvert% vorhanden) & (goto :eof))
goto :ablauf
::############################################################################################################
::########################################### ALLGEMEINE FUNKTIONEN ##########################################
::############################################################################################################
::--------------------------------- Definition von Pfad- und Groessenangaben ---------------------------------
:allg_01
set tempordner=temp
set orininordner=origin
set pfad_1=C:\bilder\convert\ms
(set bildordner_1_1=107x80) & (set breite_1_1=107)
(set bildordner_1_2=200x149) & (set breite_1_2=200)
(set bildordner_1_3=600x449) & (set breite_1_3=600)
goto :eof
::---- Pruefung auf Vorhandensein der Variablen und umlenken des Scripts auf die einzelnen Arbeitsschritte ---
:allg_02
if not defined a (set a=1) else ((set /A a=" a+1") & (set b=))
if not defined pfad_1 ((set istfehler=1) & (goto :eof))
if not defined pfad_%a% ((set fertig=1) & (call :umwandlung_03) & (goto :eof))
if not defined b call :umwandlung_01
call :umwandlung_02
goto :allg_02
::---------------------- Pruefung auf Vorhandensein der Bilder und Verarbeitungsordner -----------------------
:umwandlung_01
chdir /d "pfad_%a%"
if not exist *.jpg (set fehler=1) & (goto :eof)
if not exist "%tempordner%\" mkdir "%tempordner%"
move *.jpg "%tempordner%\" >nul
goto :eof
::------------------------------- Umwandlung der Bilder in die neuen Groessen --------------------------------
:umwandlung_02
if not defined b (set b=1) else (set /A b=" b+1")
if not defined bildordner_%a%_1 ((set istfehler=1) & (goto :eof))
if not defined bildordner_%a%_%b% (goto :eof)
if not exist "bildordner_%a%_%b%\" (mkdir "bildordner_%a%_%b%\")
cd "%tempordner%"\
%nconvert% -ratio -rtype lanczos -rflag orient -resize breite_%a%_%b% 0 -out jpeg -o "..\bildordner_%a%_%b%\%%.jpg" *.jpg
cd..
goto :umwandlung_02
::---------------------------------------- Aufraeumen der Temp-Ordner ----------------------------------------
:umwandlung_03
if not exist "%orininordner%" mkdir "%orininordner%"
move "%tempordner%\*.jpg" "%orininordner%\" >nul
move "%orininordner%\*.jpg" >nul ::spart waehrend der verprobung das laestige zurückkopieren
rmdir "%tempordner%"
goto :eof
::############################################################################################################
::################################################## SCRIPTE #################################################
::############################################################################################################
:ablauf
echo script: bilderumwandlung und upload
call :allg_01
call :allg_02
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 107537
Url: https://administrator.de/contentid/107537
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo web-activity.de!
Grüße
bastla
P.S.:
warum den set-befehl mit call aufrufen
Damit erhältst Du eine neue CMD-Instanz, in der der "set"-Befehl mit bereits aufgelösten Variablen (= für %a% und %b% werden die entsprechenden Werte eingesetzt) durchgeführt werden kann.wozu um die eigentliche variable links und rechts je 2 Prozentzeichen?
Um ein einzelnes Prozentzeichen in Batch zu erzeugen, musst Du deren 2 angeben (kennst Du vermutlich schon von der "for"-Schleife, für die in einem Batch ja auch %%i anstelle von %i zu schreiben ist)Grüße
bastla
P.S.:
vielen, vielen dank bastla für dieses kleine wunder...
Für Deinen Dank bin ich der falsche Adressat - ist bei Biber geklaut ...