mario.steinberg
Goto Top

Anzall der Übergabeparameter ermitteln sowie Parameter auswerten

Hallo,

kann mir vielleicht jemand sagen, wie ich die Anzahl der an ein Batchfile übergebene Parameter ermitteln kann?
Des Weiteren möchte ich überprüfen ob ein übergebener Wert gültig ist.

z.B.
Ist Parameter 1 nicht wert1 oder wert2 oder wert3 dann gebe Fehler aus und springe nach eof
if %1 != "wert1" |  
if %1 != "wert2" |  
if %1 != "wert3" (  
echo "Fehler"  
goto eof
)

Schon mal danke und Gruß,
Mario
Kommentar vom Moderator Biber am Jun 03, 2010 um 11:30:50 Uhr
Anzall der Übergabeparameter ermitteln sowie Parameter auswerten
Der zweite Blindflug.. äh...Blindschreibversuch....
Ich warte mal ab.
200 Anschläge pro Minute sind ein schönes Ziel ... aber bitte nicht 200 Anschläge auf meine Lachmuskeln...
Kommentar von Moderator Biber am 03.06.2010 um 13.30.50 Uhr
Anzhal der Übergabeparamter ermitteln sowie Parameter auswerten
... nach den ersten drei übergebenen Titel-Parametern scheint die Parameterprüfung besser zu funktionieren... face-wink

Content-Key: 144110

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

Printed on: April 16, 2024 at 14:04 o'clock

Member: bastla
bastla Jun 03, 2010 at 08:55:03 (UTC)
Goto Top
Hallo Mario!

Die Überprüfung auf einen bestimmten Wert könntest Du so versuchen:
echo #wert1#wert2#wert3#|findstr /i /c:"#%~1#">nul || (echo Fehler & goto :eof)
wobei "#" als Trennzeichen dient und daher nicht in "wertx" vorkommen soll (Du kannst aber natürlich andere Zeichen, etwa "§", dafür verwenden). Wenn Groß-/Kleinschreibung berücksichtigt werden soll, das "/i" entfernen.
Hinsichtlich des Zählens:
Vermutlich willst Du eher wissen, ob zB ein Parameter 3 übergeben wurde - dann:
if "%~3" neq "" echo Parameter 3: %3
Ansonsten (aber tatsächlich nur zum Zählen):
@echo off & setlocal
set /a Par=0
:Loop
if "%~1"=="" goto :Done  
set /a Par+=1
shift
goto :Loop

:Done
echo %Par% Parameter uebergeben
Grüße
bastla
Member: Biber
Biber Jun 03, 2010 at 11:26:53 (UTC)
Goto Top
Moin Mario.Steinberg.

Ich würde das etwas anders machen.
[Damit meine ich bastlas Lösungsstrategie - nicht deine Schreibweise von "Anzahl" und "Parameter" im Titel..face-wink ]

Meine Variante:
@echo off & setlocal
For %%i in (%*) do if /i "%%~i" equ "Suchwert1" goto :myStart  
For %%i in (%*) do if /i "%%~i" equ "Mein Suchwert2" goto :myStart  
(echo Parameter "Suchwert" nicht gefunden.)  & pause & goto :eof  

:mystart
Echo hier is' Label :myStart  
::  ... { eigentlicher Nutz-Batch
goto :eof

Damit lassen sich sowohl ein-wortige Parameter wie suchwert1 behandeln wie auch Parameter wie "einer mit Leerzeichen".

Beispielaufruf:
<code plain>
e:\schnipsel\chkparms sdfa asdfas wearqw nottingham
Parameter "Suchwert" nicht gefunden.
Drücken Sie eine beliebige Taste . . .

e:\schnipsel\chkparms sdfa asdfas wearqw suchwert1
hier is' Label :myStart

e:\schnipsel\chkparms sdfa asdfas wearqw "mein suchwert2"
hier is' Label :myStart


Grüße
Biber

P.S. Keine Ahnung, ob es den Begriff "ein-wortig" wirklich gibt... aber nach dem essen bin ich immer zu schläfig zum suchmaschinen.
Und immer etwas einsilbig.

[Edit] @bastla
Wieso sollte das bei meinem Vorschlag nicht gehen?
Sorry, das hatte ich weder gedacht noch suggerieren wollen... natürlich geht das auch bei deiner Variante.
ich wollte doch nur einen anderen Weg aufzeigen, keinen besseren...
[/Edit]
Mitglied: 77559
77559 Jun 03, 2010 at 11:28:59 (UTC)
Goto Top
Zitat von @bastla:
Ansonsten (aber tatsächlich nur zum Zählen):
Wobei man den Zähler auch für ein Pseudo Array nutzen kann:
:: Mario.cmd  administrator.de 2010-06-03
@echo off & setlocal
set Par=100
:Loop
if "%~1"=="" goto :Done  
set /a Par+=1
Set "Par[%Par:~-2%]=%~1"  
shift
goto :Loop

:Done
echo %Par:~-2% Parameter uebergeben
Set Par[

Beispiel Ausgabe:
>Mario.cmd 1 2 3,vier "5 fünf" 6 7 8 neun,zehn
10 Parameter uebergeben
Par[01]=1
Par[02]=2
Par[03]=3
Par[04]=vier
Par[05]=5 fünf
Par[06]=6
Par[07]=7
Par[08]=8
Par[09]=neun
Par[10]=zehn

Wenn du Aufgrund einiger definierter Werte Aktionen starten willst, kommt auch eine For Schleife mit Label in Betracht:
:: Mario2.cmd  administrator.de 2010-06-03
@echo off & setlocal
For %%A in ("wert1" "wert2" "wert3") Do If /i %%A EQU "%~1" goto :Label_%%~A  
Echo "Fehler"  
Exit /B 1

:Label_wert1 --------------------------------------------------------
Echo Label_wert1
Goto :Eof

:Label_wert2 --------------------------------------------------------
Echo Label_wert2
Goto :Eof

:Label_wert3 --------------------------------------------------------
Echo Label_wert3
Goto :Eof
Beispiel Ausgabe
>mario2 wert2
Label_wert2

Feiertagsgrüße aus NRW

Edit hatte vesehentlich die 2.Batch doppelt eingefügt. If mit /i ergänzt.
Member: bastla
bastla Jun 03, 2010 at 11:31:35 (UTC)
Goto Top
@Biber
Damit lassen sich sowohl ein-wortige Parameter wie suchwert1 behandeln wie auch Parameter wie "einer mit Leerzeichen".
Wieso sollte das bei meinem Vorschlag nicht gehen?

Grüße
bastla

[Edit] No problem face-smile - ich hatte mich nur vorweg schon vergewissert, dass das "/c:" auch da war, und mich deshalb etwas gewundert ... [/Edit]
Member: bastla
bastla Jun 03, 2010 at 11:34:03 (UTC)
Goto Top
Hallo LotPings!
Wobei man den Zähler auch für ein Pseudo Array nutzen kann:
Schön, dass Du Dich des Array-Themas annimmst (ich hatte mich, nicht nur feiertagsbedingt, davor gedrückt face-wink) ...

Grüße
bastla
Mitglied: 77559
77559 Jun 03, 2010 at 11:43:22 (UTC)
Goto Top
Zitat von @bastla:
Schön, dass Du Dich des Array-Themas annimmst (ich hatte mich, nicht nur feiertagsbedingt, davor gedrückt face-wink) ...
Hallo bastla,
was stimmt nicht mit uns, das wir bei dem Wetter vor der Kiste sitzen face-wink

Gruß
LotPings
Member: bastla
bastla Jun 03, 2010 at 11:47:26 (UTC)
Goto Top
Hallo LotPings!
was stimmt nicht mit uns, das wir bei dem Wetter vor der Kiste sitzen face-wink
Kann ich nur für mich beantworten: Eine in dieser Hinsicht falsche Berufswahl face-wink (mit der ich aber trotzdem gut leben kann) ...

Grüße
bastla
Member: Mario.Steinberg
Mario.Steinberg Jun 03, 2010 at 12:19:18 (UTC)
Goto Top
Danke für die Antworten und sorry für die Fehler im Header.

Habe gerade gestern meinen Kurs "Computerschreiben in 4 Stunden" (10 Finger blilnd) beendet und muss wohl noch etwas üben face-smile

Gruß,
Mario
Member: bastla
bastla Jun 03, 2010, updated at Oct 18, 2012 at 16:42:23 (UTC)
Goto Top
Hallo Mario!

[OT]
Habe gerade gestern meinen Kurs "Computerschreiben in 4 Stunden" (10 Finger blilnd) beendet und muss wohl noch etwas üben face-wink
Zu meiner Zeit durfte man(n) sich nach dem "Blindschreiben" aber zumindest das Ergebnis ansehen (und das Nachkorrigieren geht heutzutage, wo kaum noch Durchschläge erzeugt werden face-wink, eigentlich viel leichter - obwohl, das war damals, im vorigen Jahrtausend, wenn ich mich recht entsinne, ja eine Schreibmaschine) ...
[/OT]

Grüße
bastla

[Edit] @Biber: Ja, ja - zu Deiner, meiner, seiner Zeit war ja sowieso und überhaupt alles besser - hatte neulich auch Kollege sysad hier schon vermerkt ... face-wink [/Edit]
Member: Biber
Biber Jun 03, 2010 at 12:44:32 (UTC)
Goto Top
[OT]
Moin Mario.Steinberg,

Zitat von @Mario.Steinberg:
Habe gerade gestern meinen Kurs "Computerschreiben in 4 Stunden" (10 Finger blilnd) beendet und muss wohl noch etwas üben face-smile
Zu meiner Zeit haben die Tasten beim Computerschreiben ja wenigstens noch (unterschiedliche) Klack-Geräusche gemacht.
Beim heutigen Blindschreiben auf einer maschinengemalten iPad-Tastatur hörst du natürlich nix mehr raus...
--> ist also alles entschuldigt.


Andererseits... *grybel*....

... wenn die nicht mehr tastbaren iPad-Tasten die Begründung für die Rechtschreibfähigkeiten der heutigen Jugend sein sollen,
dann müssten aber ganz viele schon vor PISA einen ergattert haben...

Grüße
Biber
[/OT]
Member: bastla
bastla Jun 03, 2010 at 15:48:31 (UTC)
Goto Top
Hallo Mario!

[More OT]
Sagt Dir der Begriff "Verschlimmbesserung" etwas? Wie ich gerade beim Betrachten des Threadtitels
Anzall der Übergabeparameter ermitteln sowie Parameter auswerten
darauf gekommen bin, weiß ich jetzt aber auch nicht so genau ... face-wink
[/More OT]

Grüße
bastla