如何使用批处理搜索 .txt 文件中的特定短语
Posted
技术标签:
【中文标题】如何使用批处理搜索 .txt 文件中的特定短语【英文标题】:How to search for a specific phrase in a .txt file using batch 【发布时间】:2019-09-07 05:12:49 【问题描述】:我正在尝试创建一个批处理文件,该文件将在 .txt 文件中搜索特定单词并根据找到的单词给我一个响应。但是当我搜索“时间”和“计时器”时,它们都会给出相同的响应,就好像它只找到了“时间”一样。有什么方法可以搜索整个单词或一系列单词,而不仅仅是单词的一部分?
我尝试过引用单词并双引号引用单词/短语,但它仍然给出相同的响应
这是一段代码:
:: 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.bat”。如果文件有时间这个词,那么它会运行“Time.bat”,但它只会运行“Time.bat”,而不管是否存在定时器这个词
【问题讨论】:
因为Time
存在于Timer
中
【参考方案1】:
有一些更好的方法可以实现这一点,但要坚持您当前的代码。
您需要意识到字符串Timer
还包含Time
,因此如果它会在搜索匹配时启动time.bat
。所以让我们宁愿使用findstr
,我们告诉它搜索Time
结尾\>
,这样它在搜索Timer
时就不会匹配Timer
。
: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 来包含和排除,但这有点矫枉过正。
findstr /I "Time" CurrentConversation.txt | findstr /VI "Timed" test.txt CurrentConversation.txt
查看 cmd 的帮助。
findstr /?
if /?
【讨论】:
【参考方案2】:您应该可以在batch-file 中将其作为一行来完成
For %%A In (Time,Timer)Do FindStr /IRC:"\<%%A\>" "CurrentConversation.txt">Nul&&Call "Modules\%%A.bat"
只需用逗号或空格分隔的单词在括号之间传播内容,就可以了。
【讨论】:
以上是关于如何使用批处理搜索 .txt 文件中的特定短语的主要内容,如果未能解决你的问题,请参考以下文章