Auswertung bzw. Verwendung von Übergabeparametern.

Mitglied: ahe

ahe (Level 1) - Jetzt verbinden

07.01.2009, aktualisiert 16:01 Uhr, 9329 Aufrufe, 5 Kommentare

Problem:
Auswertung von Übergabeparametern.
(OS = Windows XP)

Ein Programm benötigt beim Start einige Parameter, die mit Hilfe eine Batch auf Vorhandensein und Gültigkeit geprüft werden müssen.

Auswertung bzw. Verwendung von Übergabeparametern. (OS = Windows XP)


Ein Programm benötigt beim Start einige Parameter, die mit Hilfe eine Batch auf Vorhandensein und Gültigkeit geprüft werden müssen.

MeineProgramm.exe -Parameter1 -Parameter2 -OptionalerParameter3

Werte der Parameter:

Parameter1: AUTO oder BUS oder ZUG -> Parametergruppe: Fahrzeug
Parameter2: BLOND oder ROTHAARIG -> Parametergruppe: Haarfarbe
OptionalerParameter3: ASSISTENTIN -> Opt. Parameter: Biber's Wunsch

Jeder Parameter kann/darf nur einen Wert haben, die Parameter 1 und 2 müssen gefüllt sein, der Parameter 3 ist optional.

Gültige Aufrufe wären:

MeinProgramm.exe -AUTO -ROTHAARIG -ASSISTENTIN
MeinProgramm.exe -BUS -BLOND
MeinProgramm.exe -ZUG -BLOND -ASSISTENTIN
. . .

Ungültige Aufrufe wären:
MeinProgramm.exe -AUTO -BUS -ASSISTENTIN
MeinProgramm.exe -ZUG -BLOND -ROTHAARIG
MeinProgramm.exe -BLOND -ROTHAARIG -ASSISTENTIN

Aufgabe


Die zu erstellende Batch soll verhindern, dass ungültige Parameter beim Aufruf der EXE verwendet werden, es sollen daher
  • auch vergessene Minuszeichen "-" erkannt werden
  • die Reihenfolge der angegebenen Parameter soll so sortiert werden, dass sie für die EXE gültig sind, z. B.:
            • StartMeinProgramm.cmd -BLOND -ASSISTENTIN -ZUG -> führt zu dem Aufruf der EXE: MeinProgramm.exe -ZUG -BLOND -ASSISTENTIN
            • StartMeinProgramm.cmd -ROTHAARIG -AUTO -> führt zu dem Aufruf der EXE: MeinProgramm.exe -AUTO -ROTHAARIG
  • die Anzahl der Parameter geprüft werden, da mehr als drei Parameter falsch sind
  • jeder Parameter höchstens einmal vorkommen
  • die ersten beiden Parameter müssen gefüllt sein

Erster Schritt: Ermittlung der Parameteranzahl


Zweiter Schritt: Prüfen, ob vor jedem Parameter auch ein Minus sitzt.


Allerdings wird ein einzelnes Minus jetzt auch als Parameter gewertet und bringt ein positives Ergebnis:
Dies kann man verhindern, in dem man in der for-Schleife die If-Abfrage folgendermaßen anpasst:
Danach erscheint dann die folgende Ausgabe:

Dritter Schritt: Prüfen, ob für jeden der ersten beiden Parameter auch nur ein Wert gesetzt wurde.


A: Ist jede Gruppe in der Parameterliste vertreten?
B: Ist aus jeder Gruppe maximal ein Vertreter vorhanden?

Hinzufügen der folgenden Zeilen setzt jeweils einen Zähler hoch
Jetzt sind zwar alle Anzahlen bestimmt und das Vorhandensein verifiziert, allerdings welche gültigen Werte eingegeben wurden ist noch nicht bekannt.

Durch Einfügen jeweils einer weiteren Zeile in der obigen If-Abfrage wird das dann auch gelöst:
Doch da war noch was, der optionale dritte Parameter...

Vierter Schritt: Zusammenfügen der Kommandozeile.


Tja, eigentlich wollte ich ja eine Frage stellen, nun, so wie es aussieht, funktioniert es jetzt, aber es gibt sicherlich noch etwas Optimierungspotential...

mfg
Axel



Der vollständige Code:

Mitglied: bastla
07.01.2009 um 15:12 Uhr
Hallo ahe!

Hab' zwar nur kurz drübergeschaut - sieht aber für mich sehr gut aus ...

2 Kleinigkeiten:
- Falls die Varaiable %allparameters% überhaupt benötigt wird, sollte als Ersatz der Zeilen 27 und 28
genügen.

- Ich tendiere eher zur Schreibweise
erspart - zumindest dafür - die "delayedExpansion", ist hier aber eher Geschmackssache.

Grüße
bastla
Bitte warten ..
Mitglied: ahe
07.01.2009 um 15:26 Uhr
Hallo bastla,

"allparameters" wird tatsächlich nicht gebraucht, war beim Entstehen wichtig, doch dann nicht mehr... (ist oben jetzt gelöscht!)

Nun die kurze Schreibweise des Hochzählens kam mir dann auch später in den Sinn, nur hatte ich es da bereits geschrieben...

mfg
Axel
Bitte warten ..
Mitglied: Biber
07.01.2009 um 16:13 Uhr
Moin ahe,

also hömma - Du kannst Doch hier nicht einfach ein Tutorial als normalen Beitrag ins Forum stellen.

Ich habe es für Dich mal umgestuft von "Beitrag" auf "Anleitung".

Heute morgen habe ich in einem anderen Beitrag ein Negativ-Beispiel für unleserlichen, unwartbaren und nicht nachvollziehbaren Code angemeckert.
Nun möchte nun auch das Lob für einen sauber hergeleiteten Skriptschnipsel nicht unter den Tisch falllen lassen..

Vielen Dank für Deine Mühe und Sorgfalt
Biber
Bitte warten ..
Mitglied: ahe
07.01.2009 um 16:19 Uhr
Danke für die Blumen,

nachdem ich meine erste, nicht funktionierende Version hatte und nicht mehr durchblickte, habe ich mir erst einmal aufgeschrieben, was ich machen wollte und so ergab sich das Ganze fast von selbst. Außerdem habe ich dabei auch an Dich gedacht (s. a. der optionale Parameter...)

mfg
Axel
Bitte warten ..
Mitglied: bastla
07.01.2009 um 17:02 Uhr
@Biber
also hömma - Du kannst Doch hier nicht einfach ein Tutorial als normalen Beitrag ins Forum stellen.
Annähernd so hatte ich es auch schon in meinem obigen Kommentar formuliert, mir aber dann gedacht: "Das ist Chefsache." und den Teil wieder rausgeschmissen ...

Grüße
bastla
Bitte warten ..
Heiß diskutierte Inhalte
Benchmarks
M.2 SSD und RAM zu langsam
gelöst MarkowitschFrageBenchmarks22 Kommentare

Hallo zusammen, ich habe mir folgenden PC zusammengestellt : MB: ASUS - ROG Strix Z490-E Gaming Mainboard (90MB12P0-M0EAY0) CPU: ...

Datenbanken
SQL Null Abfrage
gelöst newit1FrageDatenbanken18 Kommentare

Hallo zusammen, ich versuche eine CSV in meine Datenbank zu importieren. Das klappt auch. Die CSV hat folgendes Format: ...

Internet
Wie baue ich ein sicheres Netzwerk auf?
gelöst BitLooserFrageInternet15 Kommentare

Moin moin zusammen:) Die Thema-Überschrift sagt eigtl. schon alles - Da ich vermute, dass dies eine doch recht häufige ...

Netzwerke
Aufbau Praxisnetzwerk mit Fragen (TI, Switch, Firewall, VoIP, Netzwerkdesign)
razorrFrageNetzwerke14 Kommentare

Hallo, ich bin neu hier, aber habe hier schon sehr lange im Forum mitgelesen bzw. mich schlau gemacht und ...

Router & Routing
OPNSense statt Endian Firewall
hannes.hutmacherFrageRouter & Routing14 Kommentare

Hallo zusammen, wir setzen hinter der pfSense, die die direkt am Internet hängt, noch eine Endian Firewall ein. Dazwischen ...

Vmware
ESXi für Raspberry Pi
sabinesInformationVmware13 Kommentare

VMware hat den ESXi für den Raspberry Pi (zu Testzwecken) vorgestellt, läuft 180 Tage auf dem Pi 4 mit ...

Neue Anleitungen
Administrator Magazin
11 | 2020 Virtualisierung ist aus der IT nicht mehr wegzudenken. In der November-Ausgabe des IT-Administrator Magazins dreht sich der Schwerpunkt um das Thema "Server- und Storage-Virtualisierung". Darin erfahren Sie, wie sich die Virtualisierungstechnologie entwickelt hat, welche Varianten es im Bereich Server und Speicher gibt und wie ...
Neue Fragen
Neue Jobangebote
Server- und Storage-VirtualisierungServer- und Storage-VirtualisierungBerechtigungs- und IdentitätsmanagementBerechtigungs- und IdentitätsmanagementWebdienste und -serverWebdienste und -serverDatenbankenDatenbankenMonitoring & SupportMonitoring & SupportHybrid CloudHybrid Cloud