coldzero89
Goto Top

Findstr prüft nur von 1-9

Moin,

ich hab nen Script in dem ein Menü vorhanden ist.
Danach erfolgt eine Prüfung mit findstr ob die Zahlen zwischen 1 und 11 liegen.

Wenn ich 1-9 prüfen lasse, funktioniert das script bis 9, sobald ich 10 mache, streickt es und akzeptiert nur die 1

Was muss ich im findstr ändern damit die Prüfung von 1-11 funktioniert?

echo %AW%|findstr \x "[1-11]">nul && goto :wahl  
echo =======================================================
echo Fehler! Auswahl darf nur zwischen 1 und 11 liegen
echo =======================================================
GOTO :menu

hab bisher auch nirgends was gefunden.

Gruß Zero

Content-ID: 201774

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

Ausgedruckt am: 24.11.2024 um 04:11 Uhr

bastla
bastla 14.02.2013 aktualisiert um 16:38:24 Uhr
Goto Top
Hallo ColdZero89!

Das sollte eher so gehen:
echo %AW%|findstr \x "1 2 3 4 5 6 7 8 9 10 11">nul && goto :wahl
da in RegEx mit den eckigen Klammern ein Bereich von Einzelzeichen angegeben wird, aber keine numerische Interpretation erfolgt ...

Grüße
bastla
ColdZero89
ColdZero89 14.02.2013 aktualisiert um 16:55:31 Uhr
Goto Top
Moin,

funktioniert so auch nicht... dann kommt die Fehlermeldung: FINDSTR: 1 2 3 4 5 6 7 8 9 10 11 kann nicht geöffnet werden.

Habs auch mit eckigen Klammern drum herum probiert, auch einzelnd drum herum um jede Zahl, kein Erfolg.

Grml. Ich find sowas immer zum Haare raufen.

Gruß Zero

EDIT:
Was ich nun erstaunlich finde, wenn ich das findstr \x mache bekomme ich die Fehlermeldung: FINDSTR: 1-11 kann nicht geöffnet werden.
Mache ich findstr /x, bekomme ich nur die von mir angegebene Fehlermeldung.

Ich dreh den Slash mal um und probier deine Variante erneut.

ok - mit /x gibt die cmd die gleiche Fehlermeldung wie oben angegegeben aus.
bastla
bastla 14.02.2013 aktualisiert um 17:23:47 Uhr
Goto Top
Hallo ColdZero89!

Wenn natürlich gar keine Eingabe vorgenommen wurde (und daher %AW% leer ist), gibt's auch eigentlich nix zu prüfen - daher als Absicherung dagegen:
if defined AW echo %AW%|findstr /x "1 2 3 4 5 6 7 8 9 10 11">nul && goto :wahl
Im Zweifelsfall sollte sich das aber so lösen lassen:
if defined AW echo "#1#2#3#4#5#6#7#8#9#10#11#"|findstr /c:"#%AW%#">nul && goto :wahl
Grüße
bastla

[Edit] Fehlendes "#" und "/c:" ergänzt und auch "/x" mit Slash geschrieben [/Edit]
ColdZero89
ColdZero89 14.02.2013 um 16:58:41 Uhr
Goto Top
Moin,

AW ist IMMER gesetzt. Mindestens als 0, dies passiert bei der deklarierung der Variablen und AW wird wieder auf 0 gesetzt nachdem das Programm durchgearbeitet hat und wieder ins Menü springt.

Somit ist sichergestellt das AW immer außerhalb des einzugebenen bereiches liegt.

Gruß Zero
ColdZero89
ColdZero89 14.02.2013 aktualisiert um 17:02:39 Uhr
Goto Top
Moinsen,

schick, deine zweite Lösung hats nun gebracht.

Sofern ich das richtig verstehe werden die Zahlen "gesetzt" und findstr kontrolliert AW dann mit diesen - umgedrehtes prüfen sozusagen. Sehr cool.

Hier nun der Funktionierende Code:

echo "#1#2#3#4#5#6#7#8#9#10#11"|findstr "#%AW%#">nul && goto :wahl  
echo =======================================================
echo Fehler! Auswahl darf nur zwischen 1 und 11 liegen
echo =======================================================
GOTO :menu

Danke und Gruß

Zero
bastla
bastla 14.02.2013 aktualisiert um 17:12:16 Uhr
Goto Top
Hallo ColdZero89!

Es muss auch nach "11" noch ein "#" hin (habe ich inzwischen oben nachgetragen) ...

Um auch noch eine Eingabe "1 0" (mit Leerzeichen dazwischen) abzufangen, braucht's zusätzlich ein "/c:".

Grüße
bastla
ColdZero89
ColdZero89 15.02.2013 aktualisiert um 10:08:16 Uhr
Goto Top
Moinsen,

/c: versteh ich wenn ich mir die findstr /? durchlese, aber wenn ich das teste erscheint nur "FINDSTR: Argdument fehlt nach /c"

Hä? ^^

Gruß Zero

EDIT: Ok hab nun das Leerzeichen zwischen /c: und "#%AW%'" entfernt. Der Fehler entsteht nun nicht mehr.
Hab das ganze auch mal ohne /c: getestet. Erstaunlich was so kleine C alles bewirken können.

Danke dir face-smile

Gruß Zero