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-Key: 201774

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: bastla
bastla Feb 14, 2013 updated at 15:38:24 (UTC)
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
Member: ColdZero89
ColdZero89 Feb 14, 2013 updated at 15:55:31 (UTC)
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.
Member: bastla
bastla Feb 14, 2013 updated at 16:23:47 (UTC)
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]
Member: ColdZero89
ColdZero89 Feb 14, 2013 at 15:58:41 (UTC)
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
Member: ColdZero89
ColdZero89 Feb 14, 2013 updated at 16:02:39 (UTC)
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
Member: bastla
bastla Feb 14, 2013 updated at 16:12:16 (UTC)
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
Member: ColdZero89
ColdZero89 Feb 15, 2013 updated at 09:08:16 (UTC)
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