批量检查最后打印的行是否包含单词

我有2个batch filea.bat和b.bat。 a.bat调用b.bat和b.bat在屏幕上打印一个句子。 我怎样才能检查这句话,看它是否包含一个单词,如果它包含一个集合作为一个variables。 例如

Sentance: Hello, how are you today? If %Sentance contains% Hello set var=Hello If %Sentance contains% Hi set var=hi 

屏幕上可能有多个Sentance,所以我想检查最近显示的传送。

这是我的。

 for /f delims^=^ eol^= %%i in ('b.bat') do set lastline=%%i set "var=" echo %lastline%|findstr /i "\<hi\>">nul && set "var=hi" IF ERRORLEVEL 1 (GOTO NEXT0) ELSE (GOTO FOUND) :NEXT0 echo %lastline%|findstr /i "\<hello\>">nul && set "var=hello" IF ERRORLEVEL 0 (GOTO NEXT1) ELSE (GOTO FOUND) :NEXT1 echo %lastline%|findstr /i "\<hola\>">nul && set "var=hola" IF ERRORLEVEL 0 (GOTO NEXT2) ELSE (GOTO FOUND) :found echo %var% pause 

如果最后一行是“这是一个消息你好”的代码不起作用,

回显字符串并搜索关键字:

 set sentence=Hello, how are you? echo %sentence%|findstr /i "\<hello\>">nul && set "var=Hello" echo %sentence%|findstr /i "\<hi\>">nul && set "var=Hi" 

\<\>意思是“文字界限”,这可以避免误报(C ,C, 你好 ,…)

>nul将找到的字符串重定向到涅to以保持屏幕清晰。

&&执行set命令,前一个命令( findstr )成功。

编辑

根据你最后的评论,我明白: a.bat调用b.batb.bat写了几行,而a.bat想要得到最后一个(我希望,我明白了)。

得到b.bat的最后一行,使用:

 for /f delims^=^ eol^= %%i in ('b.bat') do set lastline=%%i echo you said: %lastline% set "var=" echo %lastline%|findstr /i "\<hello\>">nul && set "var=Hello" echo %lastline%|findstr /i "\<hi\>">nul && set "var=Hi" echo %lastline%|findstr /i "\<hola\>">nul && set "var=Hola" echo/%var% 

但有一个小问题:捕获b.bat的输出,而不是显示在屏幕上。 (特别是set /p的提示 – 所以你不知道,什么时候输入什么)。 要解决这个问题,强制b.bat写入屏幕( >con直接写入屏幕)。 所以基本上, b.bat应该是这样的:

 @echo off echo this line gets captured by a.bat >con echo this line goes directly to screen >con set /p "input=give me input: " echo something about %input%. 

注意:我使用了aschipfl答案中的eol -trick,因为(虽然看起来很丑),即使对于" and " ,这也是“标准方式”( "delims= eol=" )的问题。不是万无一失的(例如&仍然会造成问题)

Stephan的回答已经显示了如何在被调用的批处理文件b.bat的输出中找到特定的单词。

要检查调用者a.batb.bat的输出,可以执行以下操作:

假设b.bat包含以下内容:

 echo Hello, how are you? 

a.bat可能是这样的:

 for /F delims^=^ eol^= %%L in (' b.bat ^| findstr /I /R /C:"\<hello\>" /C:"\<hi\>" ') do ( set "FOUND=%%L" ) 

这将管道b.bat的输出b.batfindstr ,后者使用多个搜索字符串,然后通过for /F循环捕获输出,该循环将输出分配给变量FOUND

 Echo off :Loop Set /p Input=%CD%^> rem Show what the user typed Echo %Input% rem Execute user's typed command %Input% rem Get first word and rest of line for /f "tokens=1*" %%A in ("%input%") do echo %%A AND %%B Goto Loop 

获取用户输入的内容并模仿cmd处理(按Ctrl + C停止)。 使用set来操纵文本。

您可以使用for循环来分割文本。