我有2个批处理文件a.bat和b.bat。 a.bat调用b.bat,b.bat将一个句子打印到屏幕上。如何检查该句子以查看它是否包含单词以及是否包含将其设置为变量。例如
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
如果最后一行类似于&#34,则代码不起作用;这是一条消息你好&#34;
答案 0 :(得分:2)
回显字符串并搜索关键字:
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 hi nese,C hello ,...)
>nul
将找到的字符串重定向到nirvana以保持屏幕清晰。
&&
)成功, 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%
但是有一点问题:for
捕获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
- 技巧,因为(虽然它看起来很丑陋)这对于"
和;
都有效,这对“标准”来说是有问题的方式“("delims= eol="
)。当然,这仍然不是万无一失的(例如&
仍然存在问题)
答案 1 :(得分:1)
Stephan's answer已经展示了如何在被调用批处理文件b.bat
的输出中查找特定单词。
要检查来电者b.bat
中a.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
的输出传递到findstr
,它使用多个搜索字符串,然后由for /F
循环捕获其输出,该循环将输出分配给变量{{1 }}
答案 2 :(得分:1)
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
循环来分解文本。