Kann eine Batch Datei Schlüsselwörter erkennen?

2 Antworten

hab bisher auch ganz gute Programme schreiben können

Ja habe ich auch..., aber irgendwie warst Du wohl noch weit entfernt von komplexeren Aufgaben. Batch ist meine "Spielwiese" aber wenn man mit unvorhersehbaren Eingaben arbeitet kann Batch sich ganz schnell in ein Monster verwandeln.

Wehe der Nutzer kommt auf die idiotische Idee und drückt einfach nur ein leeres Enter oder noch schlimmer &|<>% und die ganze Bach fliegt dir um die Ohren.

In deinem Fall ist das Noch mit ein Paar "Gänsefüßchen" zu handhaben:

@echo off
set /p "Input=Dein Fragetext? "
 rem finde Schlagwort in der Eingabe (/i groß-klein ist egal)
 rem die  Leerzeichen um  die Variable %Input% und Wetter sind  gewollt, damit sichergestellt  ist das Wetter egal, an welcher Position es im Satz steht immer als  alleinstehendes Wort begrenzt  von Leerzeichen  erkannt  wird
echo " %Input% "|find /i " Wetter " >nul &&(
   rem Positivhandling
  echo habe den Begriff Wetter gefunden...
)||(
   rem optional Negativhandling
  echo weiss nicht was Du von mir willst
)
pause

...auf Findstr will ich hier nicht eingehen das bräuchte man nur wenn man komplexere Suchen möchte.

aber der Ausgabe ohne "Quotes" wird es gruselig.

crash...

@echo off
set /p "Input=gib  etwas mit &|<> ein:"
echo %Input%
pause

Idiotensicher:

@echo off
set /p "Input=gib  etwas mit &|<> ein:"
for /f "delims=" %%a in ("%Input%") do (echo:%%~a)
pause

Mit PowerShell muss man sich nicht mit Unzulänglichkeiten der Syntax herumschlagen.

demo.ps1

$Input = Read-Host 'Was  moechtest Du?'
  #ist Wetter als  ganzes  Wort im Satz?
$Input|Select-String -pattern '\bWetter\b'|%{
    Start-Process 'https://www.wetter.com/'
}
pause

Bis hier ist noch kein überragender Vorteil zu obiger Batch erkennbar. Interessant wird es wenn eine Auswahl mehrere Schlagworte (oder Worte, welche in Einzahl/Mehrzahl geschrieben werden) ins Spiel kommen:

Demo2.cmd

$Input = Read-Host 'Was moechtest Du?'
switch -regex ($Input){
    '\bWetter\b'   {Start-Process 'https://www.wetter.com/'}
    '\bHund\b'     {Start-Process 'https://img1.dreamies.de/img/676/b/6lg4cbdleap.jpg'}
    '\bTaschen?\b' {Start-Process 'https://viconchic.de/collections/herrentasche' } #ganzes Wort Tasche  oder Taschen Case insensitv...
    default  { 'Keine Ahnung  was  Du willst' }
}
pause
  • zeige mir eine tasche
  • zeige mir taschen
  • wie wird das wetter, welcher hund soll mich begleiten und ich brauche eine Tasche?
  • wie sieht Dein Hund aus?

Einfacher geht schon fast nicht mehr.

Glossar:

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Geht mit "find" oder "findstr".

Ansonsten kann ich Dir nur den Tipp geben, Dich schnellstens von der Batchprogrammierung zu verabschieden. Jede halbwegs brauchbare Programmiersprache ist logischer und mächtiger. Die Batchprogrammierung unter Windows ist ein Relikt aus DOS-Zeiten. Für irgendwelche Kleinigkeiten und Insellösungen reicht sie aus, ansonsten ist sie unbrauchbar.

ProfAstro167 
Fragesteller
 21.03.2022, 01:18

Vielen Dank, das probiere ich nachher Mal aus.

Ich bin eigentlich sehr zufrieden mit dieser Programmiersprache und hab bisher auch ganz gute Programme schreiben können. War bisher aber immer sehr aufwendig ständig jede einzelne Möglichkeit mit If Befehlen zu schreiben xD.

0
Kwalliteht  21.03.2022, 01:20
@ProfAstro167

Selbst jede BASIC-Implementierung ist der Batchprogrammierung haushoch überlegen.

0