Поиск нескольких ключевых слов во входных данных в пакетном режиме

#batch-file #find

#пакетный файл #Найти

Вопрос:

Что я пытаюсь сделать, так это создать программу, которая может распознавать, когда во входных данных содержится несколько фраз.

Код, который я использую, таков:

 :loop
set /p input="> "
echo %input%|find /i "Hello" >nul amp;amp; echo Good Morning 
echo %input%|find /i "hi" >nul amp;amp; echo Hello.
echo %input%|find /i "who are you" >nul amp;amp; echo I am Dell, %name%. if you want help, ask.
echo %input%|find /i "your name" >nul amp;amp; echo My name is Dell. What's yours? 
echo %input%|find /i "my name is" >nul amp;amp; echo That's a nice name.
echo %input%|find /i "I am " >nul amp;amp; echo Well, I like your name.
echo %input%|find /i "weather" >nul amp;amp; echo Wonderful. Sun is shining.
echo %input%|find /i "help" >nul amp;amp; echo Type your phrases in full sentences, like: NO i do not have a Job, rather than 'no'. Sometimes I struggle to understand...
echo %input%|find /i "bye" >nul amp;amp; (echo what a pity. See you! amp; goto :eof)
echo %input%|find /i "nothing" >nul amp;amp; (echo I see, well sorry! amp; goto :loop)
echo %input%|find /i "Home" >nul amp;amp; (echo What is bothering you about home? amp; goto :1)
echo %input%|find /i "School" >nul amp;amp; (echo What is bothering you about school? amp; goto :1)
echo %input%|find /i "College" >nul amp;amp; (echo what is bothering you about College? amp; goto :1)
echo %input%|find /i "game" >nul amp;amp; echo When you say game, do you mean a Video game?
echo %input%|find /i "Job" >nul amp;amp; echo %name%, do you have a job?
echo %input%|find /i "fuck" >nul amp;amp; echo Please do not swear
REM choose your keywords wisely...
goto :loop
 

Я хочу, чтобы программа складывала два и два вместе, например, она спрашивает «у вас есть работа», и если вы ответили «Нет, у меня нет работы», она может выбрать «нет» и «Работа» или «нет» и «Работа», чтобы онаможет распознать это, чтобы сказать что-то на основе того, что он нашел.
Это может помочь, так как я хотел бы, чтобы компьютер также распознал «Да, у меня есть работа»

Возможно ли это?

Методы, которые я пробовал:

 echo %input%|find /i "don't" "Job" >nul amp;amp; echo Good Morning 
echo %input%|find /i "don't" amp; "Job" >nul amp;amp; echo Good Morning 
echo %input%|find /i "don't amp; Job" >nul amp;amp; echo Good Morning 
echo %input%|find /i "don't Job" >nul amp;amp; echo Good Morning 
 

Комментарии:

1. cmd это ужасный язык; вы можете делать все, что хотите, findstr используя его (ограниченную, фальшивую) поддержку регулярных выражений, но я бы серьезно посоветовал вам поискать менее безумную среду для изучения этих вещей.

2. Например, что? Какую программу с кодом вы предлагаете? Предпочтительно, что-то вроде batch, поскольку я также работаю над игрой, используя batch, с музыкой внутри профиля Batch! Музыка также работает!

3. Python популярен в наши дни, и его должно быть довольно легко освоить медленно, просто ознакомившись с функциями обработки строк. Но если вам нравится Windows, вы совсем не похожи на меня, так что, возможно, примите мой совет с долей скептицизма.

4. Я обязательно подумаю о том, чтобы немного попрактиковаться в python xD! Это будет то, что я могу попробовать, когда я стану лучше!

5. Что произойдет, если я отвечу no , no, I have no job , или unfortunately I am jobless , или даже no I do not have a job , ни один из них не содержит строку don't и все они не пройдут тест! Существует слишком много возможных ответов на каждый вопрос, вы полностью тратите свое время, если думаете, что можете создать «какой-то ИИ», используя эти методы.

Ответ №1:

Также обновление: эта строка кода работает, вроде как….

 echo %input% |findstr /i "<No> <Job>" >nul amp;amp; echo TEXT HERE!
 

Проблема в том, что здесь будет отображаться ТЕКСТ!! если вы вводите «нет» или «задание», а не с обоими. Я только хочу, чтобы «ТЕКСТ ЗДЕСЬ !!» показывал, присутствуют ли оба

Комментарии:

1. Простое регулярное выражение для проверки наличия «нет» и «задание» в любом порядке no.*job|job.*no . Если findstr поддерживаются границы слов, например b , или <...> , возможно, добавьте их, чтобы избежать «нет» соответствия «gnome» или «canonical», а «задания» соответствуют «jojoba» или «conjobble».

2. Я просто добавил пробел по обе стороны от слова: «нет» и «задание». Но спасибо! Я собираюсь это протестировать

3. Это приведет к сбою, если «нет» или «задание» находится рядом с началом / концом строки. Вы действительно хотите изучить, что регулярные выражения могут сделать для вас.

4. Хороший момент. Как бы эта строка echo %input%|find /i "No" >nul amp;amp; echo %input%|find /i "Job" >nul amp;amp; echo TEXT HERE!! это сделала, похоже, работает на данный момент. Является ли это безупречным, я так и не знаю. Поправьте меня, если это неправильно.

5. Пожалуйста, помните мой первоначальный комментарий, вполне разумный ответ на вопрос был unfortunately I am jobless . Это не включает слово no или строку no и не включает слово job , только строку job или, возможно, для целей приведенного выше примера <job . Единственный способ взаимодействия такого типа с использованием базовых сценариев пакетных файлов и инструментов для работы — это разрешить конечному пользователю предоставлять ответы только из известного набора ответов. Для этого вы должны перечислить ответы на каждый вопрос и разрешить им нажимать определенную клавишу, чтобы выбрать выбранный ответ.