power-poler
Goto Top

Eingabe auf bestimmte wörter Prüfen

Hallo und schönen Sonntag
War lange nicht mehr hier, und will wider versuchen eine Kleinigkeit zu Schreiben

Versuche mich gerade daran die Batch Datei dazu zu bewegen die Eingabe die mit set /p Test= in die Variable Test gespeichert wird, auf bestimmte Wörter zu überprüfen.
Also z.B
Das Huhn legte gestern das Ei
Gestern legte das Huhn das Ei
Ein Ei legte gestern das Huhn
oder
123 Test TEst irgendwas Huhn test test Ei nicht möglich gestern
usw was es halt Alles für Möglichkeiten gibt dies auszudrücken.

Will jetzt einfach nur auswerten lassen, ob der Satz:
Huhn
Ei
gestern
enthält, der Rest ist egal

Habe folgende Zeilen Geschrieben
echo %Test%|Findstr /C:"Ei">nul && goto Ei  
echo %Test%|Findstr /C:"Blume">nul && goto Blume  

Die zweite Zeile brauche ich, weil auf mehre mögliche Sätze geprüft werden soll.
Falls die Bedingung fehl schlägt, also nicht alle definierten Wörter oder keins enthalten ist, soll die Zeile für die Eingabe erneut angezeigt werden.
Habe das bisher einfach so gelöst:
:Start

echo Text eingeben
set /p Test=
echo %Test%|Findstr /C:"Ei">nul && goto Ei  
echo %Test%|Findstr /C:"Blume">nul && goto Blume  

:Fehler
cls
echo falsche Eingabe erneut Eingeben
goto Start

Da die Batch hier scheinbar dan einfach mir dem Code weitermacht, scheint es so zu funktionieren.

Ich hoffe ihr wisst was ich meine
Muss den Code jetzt so ändern, das er nicht nur das eine Wort sucht, sondern alle.
Schonmal danke für eine Antwort
Mfg
Power-Poler

Content-Key: 184914

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

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

Member: pieh-ejdsch
pieh-ejdsch May 13, 2012 at 11:56:51 (UTC)
Goto Top
moin Power-Poler,

mit einer ODER Suche kannst Du nach dem "Ei" oder dem "Huhn" suchen:
(
echo Das Huhn legte ein Ei
echo der Hund der Eimer
echo das Huhn die Eier
) | findstr /ri "\<huhn\> \<Ei\>"  

Eine UND Suche könnte So ausehen:
(
echo Das Huhn legte ein Ei
echo der Hund der Eimer
echo das Huhn die Eier
) |findstr /ric:" Huhn *.* legt[e]* *.* Eie*r*"  

oder ausser der Reihe
(
echo Das Huhn legte ein Ei
echo der Hund der Eimer
echo das Huhn die Eier
echo das Huhn legte 5 eier
) |findstr /rc:"\<Huhn\>" |findstr /ric:"\<eie*r* " |findstr /ric:"\<legte\>"  

Gruß Phil
Member: Power-Poler
Power-Poler May 13, 2012 at 12:51:43 (UTC)
Goto Top
Danke für deine Antwort

Es funktioniert soweit ganz gut.
Habe jetzt Folgende Zeile:
echo %Test%|Findstr /ric:"Huhn *.* Ei[er]*">nul && goto weiter  

Es funktioniert wenn der Satz lautet:
Das Huhn legt Eier
aber nicht wenn
Eier legte das Huhn

Dein Drittes Beispiel :"Ausser der Reihe"
Ich weiß nicht genau wie du das meinst, zumindest funktioniert es so nicht, das kommt immer "Falsche Eingabe".
Member: pieh-ejdsch
pieh-ejdsch May 13, 2012 at 17:39:49 (UTC)
Goto Top
Bei "Ausser der Reihe" ist die Reihenfolge der zu findenden Worte egal, es müssen aber alle vorhanden sein.

Test im CMD-Fenster
>(echo 15 Eier legte das Huhn &echo legt MohrHuhn Setzei &echo ein ei legt das Huhn )
15 Eier legte das Huhn
legt MohrHuhn Setzei
ein ei legt das Huhn

>(echo 15 Eier legte das Huhn &echo legt MohrHuhn Setzei &echo ein ei legt das Huhn ) |findstr /rc:"\<Huhn\>" |findstr /ric:"\<eie*r* " |findstr /rc:"\<legte*\>"
15 Eier legte das Huhn
ein ei legt das Huhn

>(echo 15 Eier legte das Huhn &echo legt MohrHuhn Setzei &echo ein ei legt das Huhn)|findstr /rc:\^<Huhn\^> |findstr /ric:\^<eie*r*  |findstr /ric:\^<legte*\^>

15 Eier legte das Huhn
ein ei legt das Huhn


kommt immer "Falsche Eingabe".
Schalte Echo on um den Fehler zu finden.

Gruß Phil