Как найти конкретную фразу в текстовом файле с помощью пакета - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь создать командный файл, который будет искать в текстовом файле определенное слово и давать мне ответ на основе найденного слова.Но когда я ищу «время» и «таймер», они оба дают тот же ответ, как если бы он только нашел «время».Можно ли каким-либо образом искать слово или целую серию слов, а не только часть слова?

Я пытался процитировать слова и двойные кавычки слов / фраз, но это все равно даеттот же ответ

Это часть кода:

:: Searches for the word "time" and if found, runs the file "Time.bat" in the folder, modules

:Q3
find /I "Time" CurrentConversation.txt
if errorlevel 1 (
    goto :Q4
) else (
    Call Modules/Time.bat

)


:: Searches for the word "timer" and if found, runs the file "Timer.bat" in the folder, modules

:Q4
find /I "Timer" CurrentConversation.txt
if errorlevel 1 (
    goto :Q5
) else (
    call Modules/Timer.bat

)

Я ожидал, что если в файле "CurrentConversation.txt" есть слово timer, то он запустит "Timer.bat",И что если в файле есть слово time, то он будет запускать «Time.bat», но вместо этого он будет запускать только «Time.bat» независимо от наличия таймера слова

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Вы должны быть в состоянии сделать это одной строкой в ​​

For %%A In (Time,Timer)Do FindStr /IRC:"\<%%A\>" "CurrentConversation.txt">Nul&&Call "Modules\%%A.bat"

Просто поместите содержимое в скобках с помощью слов, разделенных запятыми или пробелами, и все будет хорошо.

0 голосов
/ 17 апреля 2019

Есть несколько лучших способов добиться этого, но придерживаться вашего текущего кода .. Вы должны понимать, что строка Timer также содержит Time, поэтому, если она запустит time.bat при поиске совпадений. Так что давайте лучше использовать findstr и скажем ему искать Time, заканчивающийся \>, чтобы он не совпадал с Timer при поиске Time.

:Q3
findstr /I "Time\>" CurrentConversation.
if not errorlevel 0 goto :Q4
Call Modules\Time.bat

:: Searches for the word "timer" and if found, runs the file "Timer.bat" in the folder, modules

:Q4
findstr /I "Timer" CurrentConversation.txt
if not errorlevel 0 goto :Q5
call Modules\Timer.bat

Я также внес некоторые изменения, чтобы избавиться от блоков кода, здесь это не нужно .. Мы просто тестируем на if not errorlevel 0. Как только он не встретит этого errorlevel, он упадет до call bat.bat. Однако, если это что-то отличное от errorlevel 0, оно будет запущено.

Кроме того, еще одним способом сделать строковое математическое преобразование было бы двойное findstr для включения и исключения, но это немного излишне.

findstr /I "Time" CurrentConversation.txt | findstr /VI "Timed" test.txt CurrentConversation.txt

См. Справку от cmd.

  • findstr /?
  • if /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...