我有一个文本文件,其中包含两行句子。在第二行的末尾,我有一个单词 say活。它可以是 Alive 或 Down。
现在我必须写一个 IF 语句,这样如果该文本文件包含 Alive,它就应该打印你好否则它应该打印你好。这需要使用批处理文件来完成。
答案1
@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?
新文本通过管道传输到第二个查找字符串,它使用 RegEx 模式来查找以 开头并以 结尾的^2.*alive$
行。这是最难的部分。2
alive
自从查找字符串如果至少找到一个匹配项,则将其错误级别设置为 0,我们可以使用简单的 IF 语句来回显“Hi”或“Hello”。
详细批次
findstr
搜索文件中的字符串/N
在每行前面添加行号.
是任意单个字符的通配符。它告诉查找字符串搜寻一切|
是管道命令。第一个命令的输出将作为第二个命令的输入传递/I
告诉查找字符串不区分大小写地搜索,因此可以找到“Alive”和“alive”^
是一个 RegEx 术语,代表以以下行开头.*
是一个正则表达式术语,代表无限数量的字符$
是一个 RegEx 术语,代表行结尾> NUL
隐藏查找字符串输出,因此匹配的行不会显示在 CMD 窗口中IF condition (command) ELSE (command)
是一个简单的IF 条件%ERRORLEVEL% EQU 0
是个退出代码findstr 的“EQU”代表“equel”
编辑(例子取自下面 OP 的评论)
你的“活着”不在第二行。而是第五行
在您的示例中,“Alive”后面有三个空格,因此
alive$
不匹配更改
^2.*alive$
为5.*alive
。或者更好,^5.* Alive $
请注意空格。