Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Variablen abfragen, deren Name sich teils aus anderen Variablen ergibt

Frage Entwicklung Batch & Shell

Mitglied: dievonnebenan

dievonnebenan (Level 1) - Jetzt verbinden

29.01.2009, aktualisiert 16:15 Uhr, 5029 Aufrufe, 6 Kommentare

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:
01.
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:
01.
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:
01.
::############################################################################################################ 
02.
::############################################# GLOBALE VARIABLEN ############################################ 
03.
::############################################################################################################ 
04.
::set prompt=$H 
05.
::@echo off 
06.
cls 
07.
 
08.
:allg_variablen 
09.
set nconvert=C:\Programme\XnView\nconvert.exe 
10.
if not exist "%nconvert%" ((set istfehler=1) & (echo fehler: nconvert nicht unter %nconvert% vorhanden) & (goto :eof)) 
11.
 
12.
goto :ablauf 
13.
 
14.
 
15.
 
16.
::############################################################################################################ 
17.
::########################################### ALLGEMEINE FUNKTIONEN ########################################## 
18.
::############################################################################################################ 
19.
 
20.
::--------------------------------- Definition von Pfad- und Groessenangaben --------------------------------- 
21.
:allg_01 
22.
 
23.
set tempordner=temp 
24.
set orininordner=origin 
25.
 
26.
set pfad_1=C:\bilder\convert\ms 
27.
(set bildordner_1_1=107x80)  & (set breite_1_1=107) 
28.
(set bildordner_1_2=200x149) & (set breite_1_2=200) 
29.
(set bildordner_1_3=600x449) & (set breite_1_3=600) 
30.
 
31.
goto :eof 
32.
 
33.
::---- Pruefung auf Vorhandensein der Variablen und umlenken des Scripts auf die einzelnen Arbeitsschritte --- 
34.
:allg_02 
35.
if not defined a (set a=1) else ((set /A a=" a+1") & (set b=)) 
36.
if not defined pfad_1 ((set istfehler=1) & (goto :eof)) 
37.
if not defined pfad_%a% ((set fertig=1) & (call :umwandlung_03) & (goto :eof)) 
38.
if not defined b call :umwandlung_01 
39.
call :umwandlung_02 
40.
goto :allg_02 
41.
 
42.
::---------------------- Pruefung auf Vorhandensein der Bilder und Verarbeitungsordner ----------------------- 
43.
:umwandlung_01 
44.
chdir /d "pfad_%a%" 
45.
if not exist *.jpg (set fehler=1) & (goto :eof) 
46.
if not exist "%tempordner%\" mkdir "%tempordner%" 
47.
move *.jpg "%tempordner%\" >nul 
48.
goto :eof 
49.
 
50.
::------------------------------- Umwandlung der Bilder in die neuen Groessen -------------------------------- 
51.
:umwandlung_02 
52.
if not defined b (set b=1) else (set /A b=" b+1") 
53.
if not defined bildordner_%a%_1 ((set istfehler=1) & (goto :eof)) 
54.
if not defined bildordner_%a%_%b% (goto :eof) 
55.
 
56.
if not exist "bildordner_%a%_%b%\" (mkdir "bildordner_%a%_%b%\") 
57.
cd "%tempordner%"\ 
58.
%nconvert% -ratio -rtype lanczos -rflag orient -resize breite_%a%_%b% 0 -out jpeg -o "..\bildordner_%a%_%b%\%%.jpg" *.jpg 
59.
cd.. 
60.
goto :umwandlung_02 
61.
 
62.
::---------------------------------------- Aufraeumen der Temp-Ordner ---------------------------------------- 
63.
:umwandlung_03 
64.
if not exist "%orininordner%" mkdir "%orininordner%" 
65.
move "%tempordner%\*.jpg" "%orininordner%\" >nul 
66.
move "%orininordner%\*.jpg" >nul ::spart waehrend der verprobung das laestige zurückkopieren 
67.
rmdir "%tempordner%" 
68.
goto :eof 
69.
 
70.
 
71.
::############################################################################################################ 
72.
::################################################## SCRIPTE ################################################# 
73.
::############################################################################################################ 
74.
 
75.
:ablauf 
76.
echo script: bilderumwandlung und upload 
77.
call :allg_01 
78.
call :allg_02
Mitglied: bastla
29.01.2009 um 18:31 Uhr
Hallo webactivity.de!

Sollte sich etwa so lösen lassen:
01.
call set "BO=%%bildordner_%a%_%b%%%" 
02.
if not exist "%BO%" md "%BO%"
Grüße
bastla
Bitte warten ..
Mitglied: dievonnebenan
30.01.2009 um 09:49 Uhr
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?
Bitte warten ..
Mitglied: bastla
30.01.2009 um 12:10 Uhr
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 ...
Bitte warten ..
Mitglied: dievonnebenan
30.01.2009 um 12:37 Uhr
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 ...
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?! ;)
Bitte warten ..
Mitglied: bastla
30.01.2009 um 18:10 Uhr
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 ...

Grüße
bastla
Bitte warten ..
Mitglied: dievonnebenan
02.02.2009 um 12:30 Uhr
@bastla Die Chance stand 50:50... *gg*

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

Grüsse
Chris
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Erstellen von Verknüpfungen mithilfe einer Variablen (3)

Frage von ciNNEx zum Thema Batch & Shell ...

Exchange Server
Exchange 2013 Installation am anderen Standort vorbereiten (3)

Frage von BlackRain zum Thema Exchange Server ...

Sonstige Systeme
UEFI Variablen beim Bootvorgang - Herunterfahren? (4)

Frage von Kedakai zum Thema Sonstige Systeme ...

Neue Wissensbeiträge
Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
VPN Tunnel aufbauen (16)

Frage von Hajo2006 zum Thema LAN, WAN, Wireless ...

Router & Routing
ASUS RT-N18U mit VPN Client hinter Fritzbox - Portforwarding (14)

Frage von marshall75000 zum Thema Router & Routing ...

Microsoft Office
Saubere HTML aus Word-Dokument (14)

Frage von peterpa zum Thema Microsoft Office ...

E-Mail
gelöst Probleme beim E-Mail Empfang (12)

Frage von TommyB83 zum Thema E-Mail ...