@echo off
findstr /N . input.txt | findstr /I ^2.*alive$ > NUL
IF %ERRORLEVEL% EQU 0 (Echo Hi) ELSE (Echo Hello)
pause
该批次使用/N
开关读取文本文件,并在每行前放置一个数字,例如:
1:This is a test,
2:and I am alive
3:Not?
新文本将通过管道传递到第二个findstr,后者使用RegEx模式^2.*alive$
查找以开头2
和结尾的行alive
。那是困难的部分。
由于如果找到至少一个匹配项,则findstr会将其错误级别设置为0,因此我们可以使用简单的IF语句来回显“ Hi”或“ Hello”。
详细批处理
findstr
在文件中搜索字符串
/N
在每行前面放置一个行号
.
是任何单个字符的通配符。它告诉findstr搜索所有内容
|
是管道命令。第一个命令的输出作为第二个命令的输入传递
/I
告诉findstr搜索不区分大小写的字符串,因此同时找到了“ Alive”和“ alive”
^
是RegEx术语,代表一行开始
.*
是RegEx术语,代表不确定数量的字符
$
是RegEx术语,代表行尾
> NUL
隐藏findstr输出,以便在CMD窗口中不显示匹配的行
IF condition (command) ELSE (command)
是一个简单的中频条件
%ERRORLEVEL% EQU 0
是findstr 的退出代码。“ EQU”代表“ equal”
编辑(示例摘自以下OP'评论)
- 您的“活着”不在第二行。它的第五
在您的示例中,“活着”之后是三个空格,因此alive$
不匹配
更改^2.*alive$
为5.*alive
。甚至更好地^5.* Alive $
注意空格。