dievonnebenan
Goto Top

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:
if not defined bildordner_%a%_%b% (goto :eof)
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:
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

Content-Key: 107537

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: bastla
bastla Jan 29, 2009 at 17:31:30 (UTC)
Goto Top
Hallo webactivity.de!

Sollte sich etwa so lösen lassen:
call set "BO=%%bildordner_%a%_%b%%%"  
if not exist "%BO%" md "%BO%"  
Grüße
bastla
Member: dievonnebenan
dievonnebenan Jan 30, 2009 at 08:49:26 (UTC)
Goto Top
ist ja der hammer... das geht tatsächlich *freu*

vielen, vielen dank @bastla für dieses kleine wunder...

aber nun noch die frage zur syntax.
warum den set-befehl mit call aufrufen und wozu um die eigentliche variable links und rechts je 2 Prozentzeichen?
Member: bastla
bastla Jan 30, 2009 at 11:10:50 (UTC)
Goto Top
Hallo web-activity.de!
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 ... face-wink
Member: dievonnebenan
dievonnebenan Jan 30, 2009 at 11:37:39 (UTC)
Goto Top
Bei der Frage mit den 2 Prozentzeichen hab ich wohl einfach nicht genug nachgedacht - das gleiche Prinzip verwendet nconvert bei der Angabe für Dateinamen nur ein paar Zeilen unter meiner Prüf-Routine *gg*

Was die Sache mit dem call set angeht - einfach genial, wie wir Thüringer sagen...

Für Deinen Dank bin ich der falsche Adressat - ist bei @Biber geklaut ... face-wink
sagen wir mal: du hast es gefunden (ist mir ja anscheinend nicht gelungen)

Vielleicht könnte man aus der zugrunde liegenden Problematik ja ein kleines Tutorial schreiben?! ;)
Member: bastla
bastla Jan 30, 2009 at 17:10:58 (UTC)
Goto Top
Hallo web-activity.de!
Vielleicht könnte man aus der zugrunde liegenden Problematik ja ein kleines Tutorial schreiben?! ;)
Ersetze "man" durch "web-activity.de" und Du erntest meine vollste Zustimmung ... face-wink

Grüße
bastla
Member: dievonnebenan
dievonnebenan Feb 02, 2009 at 11:30:09 (UTC)
Goto Top
@@bastla Die Chance stand 50:50... *gg*

Werde also am Wochenende etwas dazu schreiben - naja... ich versuche es zumindest face-smile

Grüsse
Chris