übergebene Parameter auf Gültigkeit prüfen in Batch
Hallo allerseits,
Ich hab mich hier inzwischen angemeldet, um auch mal eine Frage loszuwerden. Leider bin ich für mein folgendes Problem noch nicht fündig geworden. Ich hoffe ihr könnt mir da weiter helfenAlso hier mal kurze Einleitung zum bisherigen Stand:
- ich habe ein Batch-Script (Windows) erstellt welches mit 2 Parametern gestartet werden solltest.cmd parm1 parm2
.- Prüfung auf Existenz habe ich erfolgreich hinbekommen und setze daraufhin Default-Werte mittels einer Subroutine PARAMCHECK
IF ()==(%*) goto PARAMCHECK
IF ()==(%1) goto PARAMCHECK
IF ()==(%2) goto PARAMCHECK
Nun zu meinem bisher noch nicht gelösten Problem:
der 2. Parameter (parm2) muss überprüft werden auf Gültigkeit (Wert zwischen 1 und 1000)Da diese Parameter aus anderen Scripten übergeben ja prinzipiell frei wählbar sind (auch Programmierer machen Fehler ) will ich zumindest in diesem Script eine fehlerhaften Aufruf mit Defaultwerten korrigieren. Dazu bräuchte ich nun eine intelligente Lösung.
Ich wollte mit ürsprünglich mittels numerischer Umwandlung
(
und IF-AbfragenSET /a Var2=%2
) (
bzwIF NOT Var2 GEQ 1
)(
arbeiten.IF NOT Var2 LEQ 1000
)Das würde aber zum Fehlern bei der Verarbeitung führen, wenn Parm2 z.B. alphanumerische Werte hätte (wie: 12XY) oder reine Strings
Deshalb meine Hoffnung auf Euch Experten hier
Wie bekomme ich zusätzlich hin alle andren Werte (Zeichen) aus Parm2 auszuschließen und ebenfalls mit PARAMCHECK zu verarbeiten?
Bin für jede Anregung dankbar
MfG Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64236
Url: https://administrator.de/contentid/64236
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
5 Kommentare
Neuester Kommentar
Moin AndreasA,
willkommen im Forum.
Ich denke, die handwerklichen Details wirst Du ohnehin lieber selbst ausprobieren.
Als Strategieempfehlung würde ich anraten:
--> Wenn also in %Var1%...%VarN% 0 bei erneuter Orüfung steht, dann war die Eingabe ungültig (entweder der nicht erlaubte Wert 0 oder gar keine Zahl.
Grüße
Biber
willkommen im Forum.
Ich denke, die handwerklichen Details wirst Du ohnehin lieber selbst ausprobieren.
Als Strategieempfehlung würde ich anraten:
- die Parameter %1 %2... umzukopieren in %Var1%, %Var2%...
- aber anders als Du geschrieben hast - ohne "/a" ---> Set "Var1=%1"
- danach mit Set /a "Var1+=0 eine "numerische" Variable daraus machen.
- Wenn in Parameter %1 eine 199 drin stand ----> ist %Var1% jetzt 199
- Wenn in Parameter %1 "Augsburg" stand ----> ist %Var1% jetzt 0
--> Wenn also in %Var1%...%VarN% 0 bei erneuter Orüfung steht, dann war die Eingabe ungültig (entweder der nicht erlaubte Wert 0 oder gar keine Zahl.
Grüße
Biber
Hallo AndreasA!
Wie wahrscheinlich ist es denn, dass ein derart "deformierter" Parameter übergeben wird?
Wenn Du "wasserdicht" alles außer den Ziffern ausschließen willst, hätte ich eine (allerdings ohne Verwendung einer Schleife und dadurch weiterhin bedingt von "delayedexpansion") nicht sehr ansehnliche Variante anzubieten:
Spätestens nach der Ersetzung auch der Ziffer 9 durch "Nichts" dürfte nur mehr ein set "var2=" verbleiben, wodurch die Variable nicht mehr definiert wäre. Hat sie jetzt immer noch einen Inhalt, kann dies keine Ziffer sein.
Solltest Du an anderer Stelle schon sichergestellt haben, dass keine Leerstellen enthalten sind, könntest Du zumindest die Anführungszeichen einsparen.
Grüße
bastla
Wie wahrscheinlich ist es denn, dass ein derart "deformierter" Parameter übergeben wird?
Wenn Du "wasserdicht" alles außer den Ziffern ausschließen willst, hätte ich eine (allerdings ohne Verwendung einer Schleife und dadurch weiterhin bedingt von "delayedexpansion") nicht sehr ansehnliche Variante anzubieten:
set "var2=%2"
set "var2=%var2:0=%"
if not defined var2 goto :ok
set "var2=%var2:1=%"
if not defined var2 goto :ok
set "var2=%var2:2=%"
if not defined var2 goto :ok
set "var2=%var2:3=%"
if not defined var2 goto :ok
set "var2=%var2:4=%"
if not defined var2 goto :ok
set "var2=%var2:5=%"
if not defined var2 goto :ok
set "var2=%var2:6=%"
if not defined var2 goto :ok
set "var2=%var2:7=%"
if not defined var2 goto :ok
set "var2=%var2:8=%"
if not defined var2 goto :ok
set "var2=%var2:9=%"
if not defined var2 goto :ok
echo Fehler
goto :eof
:ok
set /a var2=%2
Solltest Du an anderer Stelle schon sichergestellt haben, dass keine Leerstellen enthalten sind, könntest Du zumindest die Anführungszeichen einsparen.
Grüße
bastla
Moin AndreasA,
danke für diese musterhafte Lösung.
Nur eine OffTopic-Anmerkung dazu:
>..Dieses Script wurde ja mit DOS-Editor (edit.com) für die CMD geschrieben ..
Na ja, soooo nostalgisch/selbstquälerisch musst Du auch nicht sein...
Mit den handelsüblichen Top-Rated-Shareware-Programmers-Editoren wie TextPad, NotePad+ und UltraEdit hast Du auch für Batches oder CmdLets Code-Formatierung, Syntax-Highlightning und vor allem die Möglichkeit, eine Plain-Text-Datei im ANSI/ASCII/DOS/UNIX/Mac-Format zu speichern.
Ich weiß zwar nicht, ob man/frau die edit.com einfach herunterlöschen darf vom Rechner, aber meistens ist das doch eine der ersten Handlungen bei Rechner-Inbetriebnahme...
Grüße
Biber
danke für diese musterhafte Lösung.
Nur eine OffTopic-Anmerkung dazu:
>..Dieses Script wurde ja mit DOS-Editor (edit.com) für die CMD geschrieben ..
Na ja, soooo nostalgisch/selbstquälerisch musst Du auch nicht sein...
Mit den handelsüblichen Top-Rated-Shareware-Programmers-Editoren wie TextPad, NotePad+ und UltraEdit hast Du auch für Batches oder CmdLets Code-Formatierung, Syntax-Highlightning und vor allem die Möglichkeit, eine Plain-Text-Datei im ANSI/ASCII/DOS/UNIX/Mac-Format zu speichern.
Ich weiß zwar nicht, ob man/frau die edit.com einfach herunterlöschen darf vom Rechner, aber meistens ist das doch eine der ersten Handlungen bei Rechner-Inbetriebnahme...
Grüße
Biber