如何使用批处理在.txt文件中搜索特定短语

时间:2019-04-17 03:17:43

标签: string batch-file

我正在尝试创建一个批处理文件,该文件将在.txt文件中搜索特定的单词,并根据找到的单词给出响应。但是当我搜索“ time”和“ timer”时,它们都给出相同的响应,就像只找到“ time”一样。我有什么方法可以搜索整个单词或整个单词系列,而不仅仅是单词的一部分?

我尝试用引号和双引号/短语来表示,但仍然给出相同的响应

这是代码的一部分:

:: 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.bat”,但无论是否存在计时器,它都将仅运行“ Time.bat”

2 个答案:

答案 0 :(得分:0)

有一些更好的方法可以实现这一目标,但要坚持使用您当前的代码。 您需要认识到字符串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,它将运行goto。

另外,进行线计算的另一种方法是包含和排除的双重查找,但这有点过分。

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

请参阅cmd的帮助。

  • findstr /?
  • if /?

答案 1 :(得分:0)

您应该能够在

中作为一行完成此操作
For %%A In (Time,Timer)Do FindStr /IRC:"\<%%A\>" "CurrentConversation.txt">Nul&&Call "Modules\%%A.bat"

只需在括号之间用逗号或空格分隔的单词来传播内容,那您就应该很好了。