批处理脚本查找特定行中的最后一个单词

批处理脚本查找特定行中的最后一个单词

我有一个文本文件,其中包含两行句子。在第二行的末尾,我有一个单词 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$行。这是最难的部分。2alive

自从查找字符串如果至少找到一个匹配项,则将其错误级别设置为 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 的评论)

在此处输入图片描述

  1. 你的“活着”不在第二行。而是第五行

  2. 在您的示例中,“Alive”后面有三个空格,因此alive$不匹配

    更改^2.*alive$5.*alive。或者更好,^5.* Alive $
    请注意空格。

相关内容