我有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
这是我的。
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.bat
。 b.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.bat
中b.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.bat
为findstr
,后者使用多个搜索字符串,然后通过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
循环来分割文本。