Kann eine Batch Datei Schlüsselwörter erkennen?
Hallo, ich programmiere gerade eine Batch Datei und wollte fragen ob es einen Befehl gibt um die Datei nach bestimmten Wörtern im Text suchen zu lassen.
Beispiel: Ich schreibe "Zeig mir das Wetter." Und die Datei sieht das Wort "Wetter" und zeigt mir das Wetter. Geht das und wenn ja, wie?
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:
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/read-host?view=powershell-7.2
- https://docs.microsoft.com/de-de/powershell/scripting/learn/deep-dives/everything-about-switch?view=powershell-7.2
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.2
- http://www.regexe.de/hilfe.jsp
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.
Selbst jede BASIC-Implementierung ist der Batchprogrammierung haushoch überlegen.
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.