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, 4991 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Microsoft Office
gelöst Bereich mit variablen Bereich in einer anderen Tabelle (7)

Frage von mreske zum Thema Microsoft Office ...

Windows Userverwaltung
gelöst Mit der PoweShell die lokal angelegten Users eines anderen Rechners auflisten (7)

Frage von M.Marz zum Thema Windows Userverwaltung ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...